全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
正規表現 part 3

1デフォルトの名無しさん2006/08/24(木) 19:04:59
正規表現(Regular Expression)スレです。

◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp

◆関連スレ
[UNIX板] 正規表現
http://pc8.2ch.net/test/read.cgi/unix/1039165754/

◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
2デフォルトの名無しさんsage2006/08/24(木) 19:06:29
とりあえずまだpart2が埋まってない
3デフォルトの名無しさん2006/08/24(木) 22:10:05
Javaで文字列属性チェックに使ったら糞重かった。
"[A-Za-z0-9]*"でサクッと半角英数字チェックするだけなのに
'a' <= c && c <= 'z'とかで判定する方が10倍速かった。

うーん、スクリプトだから許容できるのが正規表現だとでもいうのか。
4デフォルトの名無しさんsage2006/08/24(木) 22:24:37
もっと複雑な場合こそが正規表現の使いどころ。
5デフォルトの名無しさんsage2006/08/29(火) 11:35:25
/.*/
6デフォルトの名無しさんsage2006/09/09(土) 17:31:20
>>3
まあそんなもんだわさ
7デフォルトの名無しさん2006/09/12(火) 00:58:15
前スレは1000盗り合戦会場
8デフォルトの名無しさんsage2006/09/13(水) 00:09:49
infoseek
インフォ正規
インフォ精液
9デフォルトの名無しさんsage2006/09/13(水) 13:51:04
aaa111bbb222
という文字列から
変数aに111を、変数bに222を
格納するようにするにはどうしたらいいですか
10デフォルトの名無しさんsage2006/09/13(水) 13:55:11
"aaa111bbb222" =~ /\d+/
a = $&
でaに111は格納できたんですが
222も見るにはどうしたらいいですか
11デフォルトの名無しさんsage2006/09/13(水) 14:02:05
>>10
Ruby なら scan を使うと文字列を逐次正規表現マッチできて便利だよ。

"aaa111bbb222".scan(/([a-z]+)(\d+)/).each { |key, val|
p [key, val]
}

ブロックの中は適当に料理してちょ。
12デフォルトの名無しさんsage2006/09/13(水) 14:15:26
ありがとうございました。
a = Array.new
"aaa111bbb333".scan(/\d+/).each{|tmp|
a << tmp
}
てな感じで解決しました。ありがとうございました。
13デフォルトの名無しさんsage2006/09/13(水) 14:23:21
a = "aaa111bbb333".scan(/\d+/)
14デフォルトの名無しさんsage2006/09/14(木) 05:46:09
なんかスクレイピングとかリライトっぽい質問ばかりだな
15デフォルトの名無しさんsage2006/09/14(木) 10:14:56
それ以外の質問をしなくては何か都合が悪いことでもおありで?
16デフォルトの名無しさんsage2006/09/14(木) 12:07:26
わたしと正規表現とどっちが大事なの?

って言われたらどっちを選びますか?
17デフォルトの名無しさんsage2006/09/14(木) 12:11:11
性器を選びます。
18デフォルトの名無しさんsage2006/09/14(木) 13:06:04
jul8,jun1というような日付を
jul08,jun01のように前に0を入れたいのですが
これを正規表現で実現しようとすると
数字と文字を別々にマッチさせて
$10$2のように書くと、$10と解釈されてしまいます
エスケープは置換文字列では使えないようなんですが
何か良い方法はあるでしょうか?
19デフォルトの名無しさん2006/09/14(木) 13:08:08
 
20デフォルトの名無しさんsage2006/09/14(木) 13:18:27
実装言語は何かを言ってくれないと的確な回答はできないと思うのだが、
勘で "${1}0${2}" とか。
21デフォルトの名無しさんsage2006/09/14(木) 16:31:08
最近みつけたけど、ここ、まあまあわかりやすい

ttp://ukiya.sakura.ne.jp/
22デフォルトの名無しさんsage2006/09/14(木) 17:49:04
>>21
正規表現テスターをとりあえずダウンロードした。
23デフォルトの名無しさん2006/09/14(木) 19:19:36
(?:$1)0$2
24デフォルトの名無しさんsage2006/09/14(木) 19:21:58
>>23は勘違いです(´・ω・`)
25デフォルトの名無しさんsage2006/09/14(木) 20:22:33
もともと
jul08,jun01
がまざってたら
jul008,jun001
ができる
26デフォルトの名無しさんsage2006/09/14(木) 20:33:36
>>25
んなこたあない。
s/([a-z]+)(\d)\b/${1}0$2/g;
27デフォルトの名無しさんsage2006/09/15(金) 00:41:30
>>20
>>25
>>26
なるほど、自分の勉強不足でした。
{
28デフォルトの名無しさんsage2006/09/15(金) 01:13:44
Ruby互換のOnigurumaという正規表現エンジンを
TextMateというエディタから用いて変換していました。
日本語マニュアルがないため、置換文字列でどんな構文
があるかきちんと調べた事がなかったですが、今回気になって
調べてみると(?1:$1)0$2という置換文字列でうまくいきました。
Perlのやり方も凄く勉強になりました。
お騒がせしてすいません。
29デフォルトの名無しさんsage2006/09/15(金) 06:52:33
$1\x30$2 なんて方法もある。
30デフォルトの名無しさんage2006/09/18(月) 00:12:48
青空文庫のルビを消したいのだが
《.*》
だと
朝の|挨《あい》|拶《さつ》を

朝の|挨が
になっちゃうわけです。同一行に《が二つ以上現れなきゃいいんだけれども
実際現れるから困る。知恵を貸して欲しい
31デフォルトの名無しさんsage2006/09/18(月) 00:15:28
>>30
s/《.*?》//g;
「perl 最短一致」でググれ。
32デフォルトの名無しさんsage2006/09/18(月) 00:25:23
サンクス!なるへそね。恩にきる
33デフォルトの名無しさんsage2006/09/18(月) 18:29:26
行頭の1〜3文字目にスペース以外の文字がある行を
マッチささたいのですがどうしたらいいですか?
34デフォルトの名無しさんsage2006/09/18(月) 20:01:13
/^([^ ]| [^]| [^ ])/とか、perlでif (/^.../ && $& =~ /[^ ]/)とか。
35デフォルトの名無しさんsage2006/09/18(月) 20:27:32
/^.{0,2}[^ ]/
勿論 !/^ / とはマッチするものが違う
36デフォルトの名無しさんsage2006/09/18(月) 20:29:29
>>33
Perlなら、

$str !~ /^   /

じゃダメなの?
37デフォルトの名無しさんsage2006/09/18(月) 21:12:42
>>36
それだと空行や1個や2個しか文字が無い行もマッチするけどね。
38デフォルトの名無しさん2006/09/21(木) 00:03:58
[\n][\n]*
この正規表現は、二つ以上の連続した改行文字(\n)にマッチしますが
\n と \nの間にいくつかの空白文字(半角スペース, タブ)がある場合にマッチする表現がわかりません。

一応「 [\n](|[\s]*)[\n] 」と書いてみたものの、思うようにマッチしません。
どう表現すればよいのでしょうか? よろしくおねがいします。
39デフォルトの名無しさんsage2006/09/21(木) 02:26:10
>>38

で、何を使ってでそれをやろうとしているの?
\s とかあるからPerlかな?

マッチングに使っている部分全部さらしてみ。
40デフォルトの名無しさんsage2006/09/21(木) 02:38:33
>>38
正規表現勉強しなおせ


/\n\s+?\n/
41デフォルトの名無しさんsage2006/09/21(木) 03:41:31
オマエモナーw
42 ◆TWARamEjuA sage2006/09/21(木) 19:15:26
s
43382006/09/21(木) 20:50:34
>>39
PHPのpreg()系です。

HTMLの<textarea>から</textare>に入力された文字から、連続した改行(=空行=)を取り除こうと思ったのです。
ただ、空行ではないけれど、改行と改行の間にスペース(タブも含む)がある行も取り除きたいのです。

これはどう表現すればよいのでしょうか?
当然ですがtextarea要素の内容は、全体を一つの文字列として扱うので「 ^$ 」という表現はダメでした。
44デフォルトの名無しさんsage2006/09/21(木) 21:47:37
>>43
Rubyならhtmlパーサがあるから簡単に処理できるのだがな。
45デフォルトの名無しさんsage2006/09/21(木) 23:00:15
>>43
> PHPのpreg()系です。

先に言えよ、ヴォケ!

$html = preg_replace_callback('{(?<=<textarea>)(.+?)(?=</textarea>)}si',
create_function('$matches',
'return preg_replace("/(?<=\\n)\\s*\\n/", "", $matches[0]);'), $html);
46デフォルトの名無しさんsage2006/09/21(木) 23:11:48
題は空行削除であって、textatraタグは無関係でしょ
4745sage2006/09/21(木) 23:43:23
>>46
ん?空行削除されてない?
48デフォルトの名無しさんsage2006/09/22(金) 00:07:15
>>43
そんなときは、一度でやろうとせずに
まず 
「空白のみを含む行を削除」してから
「連続する改行を1改行に置換」するといいかもね。
49デフォルトの名無しさんsage2006/09/22(金) 00:23:27
>>45
正規表現勉強しなおせw
50デフォルトの名無しさん2006/09/22(金) 00:24:19
phpのeregで
@abc.gr.jp と @wxy-z.co.jp
以外のアドレスを拒否する場合
どうしたらいいでしょうか。
5145sage2006/09/22(金) 00:47:13
>>49
コード出して指摘してくださいよ。
52デフォルトの名無しさんsage2006/09/22(金) 01:59:16
>>43
ただのpreg_replaceでこんな感じでいけるだろ

/(^|\n)\s*(?:\n)/

あっちのスレで話題になってた各ブラウザの挙動がどうのは知らん
53デフォルトの名無しさん2006/09/23(土) 08:29:03
Perlで、
 &gt; から &lt; に含まれる <br> のみ全て削除するにはどうすればいいでしょう?

$str =~ s/&lt;(.*?)<br>(.*?)&gt;/&lt;$1$2&gt;/g;
でやってみたのですが、<br>が複数ある場合ひとつしか削除できません。
いろいろ調べたんですが行き詰りました。
低レベルな質問かもしれませんがお願いします。
(文中の&は全角ですが実際は半角でやってます。)
54デフォルトの名無しさんsage2006/09/23(土) 09:05:05
sub delbr {
my ($tmp) = @_;
$tmp =~ s/<br>//g;
return $tmp;
}
を用意した上で
s/&gt;(.*?)&lt;/delbr($&)/ge;
55デフォルトの名無しさん2006/09/23(土) 17:59:43
エディタとかで検索や置換する程度なのですが、
正規表現だけで、Not条件を加えるのは無理なんでしょうか?

http://www.kt.rim.or.jp/~kbk/regex/regex.html#CCLASS
にあるような、よくある勘違いの例と同じなのですが、
ここで言うと[^foo]が"foo"以外では無く、fとo以外の一文字をあらわすのはわかります。

でも、それではその"foo"を全体を含まない文字列というのを
表現(追加)したい場合はどうすればいいんでしょうか?

"|"でorが出来るみたいにnotできたら簡単確実なのに、うまく除外するのに毎回頭を絞ってます。
検索等フロントエンドの実装で、否定条件指定のフィルタリングがある場合ならいいんですが…

例えば[^(giko|mike)]nekoみたいな感じで、簡単に文字列や正規表現全体を
否定(〜以外)できたらなにかと便利だと思うのですが、
それは正規表現の範疇外なのでしょうか?

うまくやる方法はありますか?
56デフォルトの名無しさんsage2006/09/23(土) 18:26:40
(?!giko)(?!mike)(?=neko)
こうですか!? わかりません!

…原理はわからないが環境によっては動くな。おいおい勉強しまつorz
57デフォルトの名無しさんsage2006/09/23(土) 18:39:05
AJAXでリアルタイムに正規表現チェックできるサイト
すごい便利。

Rex V: an AJAX Regular EXpression eValuator
http://www.rexv.org/

58デフォルトの名無しさんsage2006/09/23(土) 18:46:54
>>55-56
何を何でやりたいのかはっきり書かないからレスがない。
59デフォルトの名無しさんsage2006/09/24(日) 00:18:49
[^(foo)]
60デフォルトの名無しさん2006/09/24(日) 10:55:50
>55

\b(?:(?!giko|mike)\w)+neko

とか、どうですか。
61デフォルトの名無しさんsage2006/09/24(日) 11:06:49
([あ-ん]|あっ)*
62デフォルトの名無しさんsage2006/09/24(日) 11:36:40
>>61
おまえのアヌスになど興味はない
63デフォルトの名無しさんsage2006/09/24(日) 20:50:08
ワロタ
64デフォルトの名無しさんsage2006/09/24(日) 22:59:48
* ←アナル
65デフォルトの名無しさんsage2006/09/24(日) 23:18:17
 * ←アナル
ξ←ソフトクリーム

MS Pゴシックで見てね1
66デフォルトの名無しさんsage2006/09/25(月) 00:05:06
    ∧_ ∧     ([あ-ん]|あっ)*
   (´∀` )
    (⊃⌒*⌒⊂)
     /__ノ''''ヽ__)
67デフォルトの名無しさんsage2006/09/25(月) 20:11:30
<a href='javascript:window.open("http://hoge/page","f","width=460,height=400");void(0);'>javascript:window.open</a><br>
のようなリンクを
<a href='http://hoge/page'>javascript:window.open</a><br>
にするには
Obj.href.replace(/JavaScript:window.open\((\"?|\'?)(.*?)(\"?|\'?),?.*\);?(.*);?/ig,'$2')
ではうまくいきません。
よろしくお願いします。
68デフォルトの名無しさんage2006/09/25(月) 20:24:20
age
69デフォルトの名無しさんsage2006/09/26(火) 18:09:05
Cソース中の2つのコメントの、「//・・・」と「/*・・・・・*/」を、空白に置き換えることは可能ですか?
置き換えるのは空白一文字ではなく、コメントになっている文字分空白にしたいです
70デフォルトの名無しさん2006/09/26(火) 23:01:46
$text='</a></b>AIUEO</c>';
$pat='>(.*?)</c>';
if($text=~/$pat/) {
 print $1."\n";
}
else {
 print "ng\n";
}

AIUEOのみ抽出したいのですが、</b>AIUEOが返ってきます。
.*?は最短マッチのはずですが、なぜでしょうか?
71デフォルトの名無しさんsage2006/09/26(火) 23:29:57
>>69
こういう例を考えると正規表現よりCでコード書いた方が早いと思うよ
printf("string//string"); // print

>>70
Perlでは一度成功したらそれでマッチが完了する
最短なのは .* に関してのみ
>([^<>]*)</c>
で望みのマッチをする
72デフォルトの名無しさんsage2006/09/26(火) 23:39:31
>>70 おまえもしかして、あき?
7370sage2006/09/27(水) 00:12:15
>>71
>Perlでは一度成功したらそれでマッチが完了する
これは前方から順に一致検索をしているとから、ということですか?
たとえば、
$text='</b></b>AIUEO</c></c>';
$pat='</b>(.*?)</c>';
の場合、$textの先頭側にある</b>と</c>に挟まれた文字列が抽出されてくるから、</b>AIUEOがマッチ。
もし後方から一致検索されていれば、AIUEO</c>がマッチするはずですもんね。

スマートな方法がなさそうなので([^<>]*)にしときます。
ありがとうございました。

>>72no
74デフォルトの名無しさんsage2006/09/27(水) 12:03:56
#!/usr/bin/perl -p0777
BEGIN {
$COMMENT = qr{/\*.*?\*/};
$COMMENT2 = qr{//[^\n]*};
$DOUBLE = qr{\".*?[^\\]\"};
$SINGLE = qr{\'.*?[^\\]\'};
$OTHER = qr{[^"'/]};
}
s/($DOUBLE|$SINGLE|$OTHER+)|$COMMENT|$COMMENT2/$1/g;

詳説 正規表現がどっかにいってしまった
添削希望
75デフォルトの名無しさんsage2006/09/27(水) 12:10:09
コメントを除去したいならプリプロセッサに通せば良いと思うんだ
76デフォルトの名無しさんsage2006/09/27(水) 20:30:05
Javaで正規表現を入力チェックに使ってる人って居る?
速度はともかく開発効率がいいから、
決められたライブラリしか使えないときに便利なんだよね
77デフォルトの名無しさんsage2006/09/27(水) 23:51:17
>>74
意外とシンプルにまとまるんだね
リテラルで"string\\"のパターンが来ると内外逆転するかな
やり方はいろいろあるけど qr{"(\\.|[^"])*"} とか
78デフォルトの名無しさんsage2006/09/28(木) 00:21:03
>>76
GUIコンポーネントの入力チェックに使ったことはあるな
ああいうのは手でコーディングするのは苦痛なだけだから。
あと、入力チェックが必要になるようなGUIコンポーネントの場合、
入力は一般的に短いので、速度は問題にならないし
79デフォルトの名無しさん2006/09/28(木) 07:56:20
ちょっと質問

<aaa>
<aaa>
<aaa>
<aaa>
<data1>xxxx</data1>
<data2>yyyy</data2>
</aaa>
</aaa>
</aaa>
</aaa>
こんな文字列があったとして
正規表現つかって一発で一番内側にある<aaa>
の内側の文字を取ってくることってできるんだろうか・・・・
可能か不可能かどうかも想像がつかない・・・orz
80デフォルトの名無しさんsage2006/09/28(木) 09:04:06
>>79
できる。
81デフォルトの名無しさん2006/09/28(木) 09:23:50
>>80
横からスマソ
へぇ〜
出来るんだ
これは俺もちょっと興味深い
82デフォルトの名無しさんsage2006/09/28(木) 12:00:38
<aaa>(?!<aaa>)(.*?)</aaa>
83デフォルトの名無しさんsage2006/09/28(木) 15:40:04
XMLを無理やり正規表現で扱うくらいなら
最初からXMLとして扱ったほうが楽なんじゃないの?
84デフォルトの名無しさんsage2006/09/28(木) 18:50:49
長さ優先じゃなくて出現優先にすりゃいいだけだね
85デフォルトの名無しさんsage2006/09/28(木) 19:22:59
>>80
入れ子処理だよね。正規表現第二版だと…

( )の入れ子の場合こうなっているから、
$LevelN = qr/ (?> [^()]+ | \( ??{ $LevelN }) \) )*/x;

えーと………

$LevelN = qr/ (?> [^(<aaa>|<\/aaa>)]+ | <aaa> (??{ $LevelN }) <\/aaa> )*/x;


……(<aaa>|<\/aaa>)の否定ってどうやるんだ?


後は任せた orz
86デフォルトの名無しさんsage2006/09/28(木) 20:12:05
正規言語でない言語を正規表現で扱おうとするのはやめた方がいいんでないかと
いや、今の「正規表現」が厳密には正規表現じゃないのは知ってるけど、やっぱり
無理やり拡張したため、無理が出てると思うんだ
87デフォルトの名無しさんsage2006/09/29(金) 00:07:24
別に拡張表現使わなくてもできるけど。
/(<aaa>)*(.*?)<\/aaa>/
88デフォルトの名無しさんsage2006/09/29(金) 01:50:24
バックトラックしまくりそうだけど。一応。

(<aaa>.*)*<aaa>(.*?)<\/aaa>

Perlなら、(<aaa>.*?)*<aaa>(.*?)<\/aaa>
でもイケた。
89デフォルトの名無しさんsage2006/09/29(金) 04:41:56
>Perlなら、(<aaa>.*?)*<aaa>(.*?)<\/aaa>
Perlなら、{(?:<aaa>.*?)*<aaa>(.*?)</aaa>}m
90デフォルトの名無しさんsage2006/09/29(金) 10:15:22
1. Function
2. End Function
3. Exit Function
上記で1だけを検索したい場合どうすればいいでしょうか?

↓ではだめでした
 (?<!(Exit|End))\s*Function

91デフォルトの名無しさんsage2006/09/29(金) 10:20:41
>>90
^Function$
でいいんじゃね?
92デフォルトの名無しさん2006/09/29(金) 10:39:03
>>80->>89
トンクス!
もらった情報でなんとかなったさ〜!
ソフトでガリガリ解析するのがたまらなかったんで・・・

ちなみにXML解析じゃぁないんだけどね(^^;
俺ももっと勉強しなきゃ・・・だなぁ(;´Д`)

もっと頭やわらかくする必要がありそうだorz
93デフォルトの名無しさんsage2006/09/29(金) 10:43:36
>>90
(?:^|[^dt\s]|(?:^|[^n]|(?:^|[^E])n)d|(?:^|[^i]|(?:^|[^x]|(?:^|[^E])x)i)t)\s*Function

オレならFunctionでマッチさせてマッチ位置もらってからEndかExitが前に
ないことを別途調べるな。否定と正規表現は相性悪い。

94デフォルトの名無しさんsage2006/09/29(金) 10:45:47
パーサ書いた方が実装容易で見通しも保守性も拡張性もあって良いような気がする漏れは失格ですかそうですか。
95デフォルトの名無しさんsage2006/09/29(金) 11:06:53
タグ系はXPathでええやん
96デフォルトの名無しさんsage2006/09/30(土) 02:44:00
>>94
俺も同じこと思った。あと、XMLだとそもそも既存のパーサがあるのに
何故それを使わないで正規表現で済まそうとするのかと。あと、ある要素
取り出すだけなら、>>95の書いているようにXPath使う手もあるな
97デフォルトの名無しさんsage2006/09/30(土) 06:37:14
アクセスログから検索ワードを抽出するのを試みたいんだけど、
色んな検索エンジンや仕様があって把握しきれません
まとめたサイトみたいなものはありませんか
98デフォルトの名無しさんsage2006/09/30(土) 11:41:39
>>97
>>1

何のためのテンプレよ。
99デフォルトの名無しさんsage2006/09/30(土) 13:37:17
perlの
(?{ code })
Perlにおいて、埋め込まれたPerlコードを実行します
(??{ code })
Perlにおいて、埋め込まれたPerlコードを実行してその結果を正規表現を表すものとして使用
ができる、windows用の置換ツールってありますか?
100デフォルトの名無しさんsage2006/09/30(土) 14:03:11
何に使うの?
101デフォルトの名無しさんsage2006/09/30(土) 14:08:17
>>99
Perl
102デフォルトの名無しさんsage2006/09/30(土) 19:01:09
bbbにマッチさせるにはどうすればよいでしょう?
ただし、次のように、bbbが<x>と</x>に囲まれている場合は除きます。
また、aaa,bbbは0個以上の任意の文字列とします。
言語はrubyです。

<x>aaabbbccc</x>

自分でやってみた結果はこうです。

/(?!<x>.*)bbb(?!.*<\/x>)/

これでうまくいっているように見えますが、
他に書き方があればよろしくお願いします。
103デフォルトの名無しさんsage2006/09/30(土) 19:03:35
>aaa,bbbは0個以上の任意の文字列とします。

aaa,cccは0個以上の任意の文字列とします。
でしたorz
104デフォルトの名無しさんsage2006/09/30(土) 19:14:42
思うんだがなんで自分でパーサ書かないのかな?
XMLだとタグが1行におさまっているとは限らないわけで

<x
>
aaabbbccc
</x>

とかも考えられるでしょ?
そんなのを正規表現でやる方がおかしい
105デフォルトの名無しさんsage2006/09/30(土) 19:22:09
確かにブランクの扱いに特徴のあるものは正規表現に向いてないな。
106デフォルトの名無しさんsage2006/09/30(土) 20:00:16
タグは必ず1行におさまります。個人的に利用してるデータで、XMLとかじゃないんですよ。
なので、実は括弧は目印にすぎませんから、形式は何でもいいんです。
ただ、マッチした部分を括弧で囲みたいわけです。しかし、すでに括弧で囲まれている場合は、
不要なんです。入れ子にしたくないわけです。
107デフォルトの名無しさんsage2006/09/30(土) 20:34:17
>>106
「括弧」って何の話?
108デフォルトの名無しさんsage2006/09/30(土) 20:46:18
require 'html'
html = HTMLtokens.new('ファイル名l')
html.between("x") { |i| html.tokens[i] = html.tokens[i].gsub(/b+/, 'c') }
109デフォルトの名無しさんsage2006/09/30(土) 20:49:14
まあそれでも<x>aaaa¥<bbb</x>とかではまったりするわけよ
正規表現にふさわしくない題材だと思うね
110デフォルトの名無しさんsage2006/09/30(土) 20:51:18
テンプレサイトに置いてるHTMLパーサ使えば、
広告のカットやテーブル項目の並び替えとかスクリプトからできるんだが。
マニュアルが無いせいなのかな。
111デフォルトの名無しさんsage2006/09/30(土) 20:56:49
XMLを正規表現でやるのはやっつけ仕事の時だけ
112デフォルトの名無しさんsage2006/09/30(土) 20:57:56
正規表現の実装というと、やっぱりPerlが基準になるのか?
あまりいいたくはないが、「Perlの正規表現に準拠」ってなるのか。
Perlから正規表現の道に入ったからさ。
113デフォルトの名無しさんsage2006/09/30(土) 21:00:27
POSIXが基準だろ。
漢字が扱えるのでPOSIXなのはboostだと思う。
114デフォルトの名無しさんsage2006/09/30(土) 21:30:50
ふ〜ん。たんくす。
115デフォルトの名無しさんsage2006/09/30(土) 21:37:12
>>109
というか、何でもかんでも正規表現で扱えるわけじゃないというのを
知らない奴が多過ぎる。自分の周りでもXMLのパーサを一生懸命
正規表現で書こうとしてる奴がいたりして、辟易する
116デフォルトの名無しさんsage2006/09/30(土) 21:38:55
汎用的なトーカナイズパーサーが無いからじゃねーの?
117デフォルトの名無しさんsage2006/09/30(土) 21:41:18
XMLパーサはライセンスと段取りのメンドさが問題だろ。

あとWEB上のルールのいいかげんなHTMLの処理も出来ないから、
例えばショップのWEBページから価格を吸い出して
XMLに保存という時にも困る。
118デフォルトの名無しさんsage2006/09/30(土) 23:37:56
>>114
納得すんなよ
119デフォルトの名無しさんsage2006/10/01(日) 00:37:01
>>114
Perlの正規表現はPOSIXのそれを超えている。
120デフォルトの名無しさんsage2006/10/01(日) 00:45:58
Perlの正規表現の欠点は

・仕様の合わせ込みが厄介なこと、
・DFAのエンジンとの親和性が低いこと
・コストの計算が難しいこと(計算量の爆発の予測しにくい)
・最短の一致を見つけるのが遅くなる(ifの条件式とかは別に最短でも成立する)

原因は縦型探索で比較の順序の影響を受けることにある。
121デフォルトの名無しさんsage2006/10/01(日) 01:12:01
c++0xのregexのドラフトには、POSIXの他ECMAScript準拠の正規表現も
盛り込まれてる。
最初の版だとPerl準拠のもあったんだけど、削除されてしまった。
122デフォルトの名無しさんsage2006/10/01(日) 01:18:43
あと、将来的にメニイコアでスレッド立てまくりな環境になった場合、
POSIXだと完全な最長一致だから並列実行で設計できるが
Perl式だと互換性のすり合わせが難しくなるだろ。
(最初に見つけた結果で探索を打ち切るのだがその順番が)
123デフォルトの名無しさんsage2006/10/01(日) 01:28:31
>>118-119
やっぱりPerlは詰め込み杉ってところだよね。
最近では、java.util.regex をよく使ってる。
javascriptだとブラウザ対応でどこでも動くから、
javascript の正規表現を知っておくと良さそうだね。
メジャーな実装としては、perl, ruby, javascript (java, c$)ってところかな?
ありがとね〜
124デフォルトの名無しさんsage2006/10/01(日) 13:10:09
>>111
>XMLを正規表現でやるのはやっつけ仕事の時だけ

それって某社の取締役最高技術責任者のこと?
125デフォルトの名無しさん2006/10/04(水) 13:28:03
0〜100までしか入力できないようにする方法ありますか?
126デフォルトの名無しさんsage2006/10/04(水) 17:18:08
言語を教えろ、言語を。
127デフォルトの名無しさんsage2006/10/04(水) 17:35:35
/^(100|[1-9]\d|\d)$/
128デフォルトの名無しさんsage2006/10/04(水) 21:05:15
if文でゴー!
129デフォルトの名無しさんsage2006/10/10(火) 10:28:06
a-z A-Z 0-9 のように全角記号を始点から終点で指定するには?
130デフォルトの名無しさんsage2006/10/10(火) 11:54:44
>>129
全角記号の定義とエンコードによってまちまちなんでね?
131デフォルトの名無しさんsage2006/10/10(火) 22:37:50
http://up.nm78.com/data/up112376.jpg
132デフォルトの名無しさんsage2006/10/10(火) 22:53:33
>>131
あとついあったよね、会談。
はずしてやんの。
133デフォルトの名無しさんsage2006/10/10(火) 23:03:19
占星術は統計学なんだから、断言してる時点で詐欺師
134デフォルトの名無しさんsage2006/10/11(水) 00:11:47
>>132



???
135デフォルトの名無しさんsage2006/10/11(水) 12:28:34
>>130
unicode

つか、それぞれのエンコードの定義マップ見たらいいわけ?
136デフォルトの名無しさん2006/10/11(水) 17:12:53
HTMLのソースから任意の拡張子ファイルにリンクしているサムネイル画像のURLを
取得したいのですが、どういう正規表現で可能でしょうか?

具体的には例えば

 <a href=xxx.mpg><img src=/image/zzz.jpg></a>

このようなものから/image/zzz.jpgを抜き出したいのです。

WEB巡回する用途なので、コロンやらパスやらのフォーマットは
多様なものに対応したいと思っています。言語はPHPです。
137デフォルトの名無しさんsage2006/10/11(水) 18:37:03
迷惑スクレイパー
138デフォルトの名無しさんsage2006/10/12(木) 02:14:12
行の2〜4桁目が3a1以外と3a3以外がある行を見つけるには
どのようにしたらいいでしょうか?
139デフォルトの名無しさんsage2006/10/12(木) 05:14:06
grep -v '^.3a[13]'
140デフォルトの名無しさんsage2006/10/12(木) 10:15:40
マッチさせたい文字
aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb

perlのマルチラインモードで「aaa.*?$^bbb」でいけると思ったのですがだめでした。
上記の条件にあう正規表現を教えてください。
141デフォルトの名無しさんsage2006/10/12(木) 15:38:35
(?<=yyy)bbb
142デフォルトの名無しさんsage2006/10/12(木) 20:11:01
>>141
すいません。
yyybbbにもマッチさせないです。
というか、正規表現のマルチラインで
改行を、$^で指定できないのでしょうか?
143デフォルトの名無しさんsage2006/10/12(木) 20:28:19
改行文字書いちゃえば?
/aaa.*¥nbbb/;
144デフォルトの名無しさんsage2006/10/13(金) 03:19:28
一度"\n"でjoinして
/aaa([^\n])\nbbb/
でいいんじゃないか?
145近藤雅彦sage2006/10/13(金) 11:18:33
マッチさせたい文字
aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb

無理
bbbはどうすんのさ
146近藤雅彦sage2006/10/13(金) 11:19:29
なんだ改行ありかよ
否定先読みでも使っとけ
147デフォルトの名無しさんsage2006/10/13(金) 11:36:46
何を前提にしているのかよくわからんが、perlのmは、

^が改行の直後にもマッチ
$が改行の直前にもマッチ

するようになるだけ。したがって$^で改行それ自体を指定する
ということにはならない。

143のいうように普通に\nとして書け。
148デフォルトの名無しさんsage2006/10/13(金) 13:28:10
if (aaa == bbb) {
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
}

xxxの中に、hogeが一切どこにも入らない if () { .... } を検索したいのですが、
perlの正規表現でできますか?
149近藤雅彦sage2006/10/13(金) 17:01:47
>>148
否定先読み
150デフォルトの名無しさんsage2006/10/13(金) 20:53:44
>>149
できない!
M/if[^}]*(?!hoge)}/m
151デフォルトの名無しさん2006/10/13(金) 21:41:48
<b>(.+?)</b>

みたいな正規表現を見かけたのですが、

.+? ってどうして
.+ じゃいけないんですかね
152デフォルトの名無しさんsage2006/10/13(金) 21:49:03
>>151
<b>...</b>...<b>...</b>
の外側の<b>〜</b>にマッチしてしまったりするから
153デフォルトの名無しさん2006/10/14(土) 16:34:24
>>150
>>1
の内容を理解してない低脳だから
154デフォルトの名無しさんsage2006/10/14(土) 20:48:54
学び始めたばっかいまいち解っていないのですが、2chのようにhttpが書かれたら
リンクをつけたいのですが、どうしても上手くいきません。
単に正規表現が間違ってるだけかと思われるのですが、
普通、httpにリンクをかける場合どのような正規表現をもちいればいいのでしょうか?
今、phpでpreg_match('/^http://+[a-zA-Z0-9\.\-\=\/\%\$\?\&\_]$'、$a)のような
変な書き方をしているですが、どうかよろしければ正しい方法を教えていただけないでしょうか?
155デフォルトの名無しさんsage2006/10/14(土) 23:03:35
>>153
難しくてわからないんだよぉ〜。
どうしてもifから}間での間に文字が入らないの先読み否定がうまくできない・・・
156 ◆TWARamEjuA sage2006/10/15(日) 00:32:11 ?BRZ(6667)
https?://\S+
なんてどうかしら?
157デフォルトの名無しさん2006/10/15(日) 02:33:45
>>156
www.hoge.comですよ
の ですよ もひっかからね?
158デフォルトの名無しさんsage2006/10/15(日) 04:40:33
>154
googleで「URLの正規表現」を検索すれば
159 ◆TWARamEjuA sage2006/10/15(日) 09:24:22 ?BRZ(6667)
>>157
そういうのは引っかからないで欲しいですよね。
www.hoge.com/search.php?query=ですよ
こゆのは引っかかって欲しいですよね♪

URI(URL)の正規表現なんて、どこまでを通すか通さないのかのさじ加減が難しいのかと思うのですです。
160デフォルトの名無しさんsage2006/10/15(日) 09:54:53
一般的に考えてURLの末尾には改行かスペースが入るだろう。
wikipediaへなんかのリンクだと日本語も使われるので、それは引っ掛けてほしいところ。
161デフォルトの名無しさん2006/10/16(月) 13:53:14
http://72.14.203.104/
なんてね
162デフォルトの名無しさん2006/10/18(水) 00:01:02
>>159
安易に
https?://[!-~]+[=\?&]?\S+
日本語の前に来る記号にどんな種類があるか知らないけど w
163デフォルトの名無しさんsage2006/10/18(水) 20:04:42
if(/○○○/../□□□/)ってどういう意味?
164デフォルトの名無しさんsage2006/10/18(水) 20:39:03
○○○が含まれるものから、□□□が含まれるものの間は真ってことじゃないのかな?
165デフォルトの名無しさんsage2006/10/18(水) 23:11:32
オライリーの「正規表現」に
URLにマッチする正規表現が載ってなかったっけ?
166デフォルトの名無しさんsage2006/10/18(水) 23:27:45
あるけどあんまり好きじゃないな、あのやり方・・・
167デフォルトの名無しさんsage2006/10/19(木) 16:26:13
>163
http://d.hatena.ne.jp/palmo/20060724/rangeop

>165
http://www.din.or.jp/~ohzaki/regex.htm#URI
168デフォルトの名無しさんsage2006/10/20(金) 18:30:29
asdf
asdfasdf
asdfasdfasdf

一行目の asdf だけに一致させたい場合
どうすればよいのでしょうか?
169デフォルトの名無しさんsage2006/10/20(金) 18:50:51
^asdf$
170デフォルトの名無しさんsage2006/10/20(金) 19:20:33
>>169
アリガd
171デフォルトの名無しさんsage2006/10/24(火) 02:14:14
perlの正規表現で (a|b) と ([ab]) にパフォーマンスの差はありますか?
(a|b|c) と ([abc]) の場合はどうでしょう?
172デフォルトの名無しさんsage2006/10/24(火) 09:35:56
>>171
文字クラスで十分なときは文字クラスの方が速いらしいが
気になるならベンチとって確認しろ。
173デフォルトの名無しさんage2006/10/25(水) 17:04:24
RUBYで、
str = ["<あ>-<#>-<い>--<#>-<1>-<2>-<#>-<x>-<y>"]

という形があるとして、
一番後ろの<#>から後ろ(<x>-<y>)を抜き出すにはどうすればいいですか?
174デフォルトの名無しさんsage2006/10/25(水) 18:04:57
str[0].rindex(/<#>-/) && $'
str[0].scan(/<.>-<.>/)[-1]
str[0].scan(/<#>-([^#]+)\Z/)[0][0]
175173sage2006/10/25(水) 18:56:51
>>174
参考になります。
ありがとうございます。
176デフォルトの名無しさん 2006/10/26(木) 02:20:08
正規表現と聞いて「性器表現」と連想してしまうのは俺だけ??
177デフォルトの名無しさんsage2006/10/26(木) 05:32:25
うん
178デフォルトの名無しさんsage2006/10/26(木) 06:14:22
>>176
心配すんな正常だ
179デフォルトの名無しさん sage2006/10/26(木) 14:32:10
性器表現・・・どんな演算子があるんだろ。萌
180デフォルトの名無しさん2006/10/26(木) 16:19:38
preg_match("/docomo\.ne\.jp$/",$host)

これでdocomo.ne.jpがひっかからないのですが
どうしてでしょうか?
181デフォルトの名無しさんsage2006/10/26(木) 16:59:45
マルチウゼェ。
1821802006/10/26(木) 17:01:35
申し訳御座いませんでした。
183デフォルトの名無しさんsage2006/10/26(木) 17:50:38
>>179
*ってよく使うよ。


   ∧_ ∧
  (´∀` )
    (⊃⌒*⌒⊂)
     /__ノ''''ヽ__)
184デフォルトの名無しさん sage2006/10/26(木) 23:50:28
>>179
まあ♂♀はあるだろうな。。。
185デフォルトの名無しさんsage2006/10/27(金) 00:53:54
^[ちま]んこ$
186デフォルトの名無しさんsage2006/10/30(月) 20:50:52
Perlの掲示板スクリプトでタグが入力されたとき、
<em><q>text</em></q>
のように要素が重なり合ったときにエラーを返すようにしたいんですが、
どうすればいいか教えていただけませんか?
187 ◆TWARamEjuA sage2006/10/30(月) 22:37:59 ?BRZ(6667)
>>186
かーなーりすれ違い♪
HTML-lintに通すと良いかも♪
188デフォルトの名無しさんsage2006/10/31(火) 19:03:40
"o:\\Desktop\\test\\test1\\ttea\\tarachan.txt"

この形式からtarachan.txtの入っているフォルダ名を得るにはどう記述したら良いのでしょう。
189デフォルトの名無しさんsage2006/10/31(火) 19:24:27
自己解決しました。
最良かどうかは解りませんが/(^\".*?\\.*?)[^\\]*?\"/で出来ました。
190デフォルトの名無しさんsage2006/10/31(火) 19:27:55
連投すいません
/(^\".*?)[^\\]*?\"/
でも大丈夫なようですね。
191デフォルトの名無しさんsage2006/10/31(火) 21:04:11
_splitpath使った方が早いような。
192デフォルトの名無しさんsage2006/10/31(火) 21:35:23
>>186
念のため聞いておくが、そのような記述が必ずしもHTMLの仕様に逆らってはいないことを知っての上でそうしたいんだな?
193デフォルトの名無しさんsage2006/11/01(水) 11:06:29
linuxのnmap見たいなツールで、windows用のGUIツールありますか?
テストサーバでオープンになっているポートを知りたいのですが。
194nobodyさん      2006/11/01(水) 18:28:29
このような正規表現 [a-zA-Z0-9.]+ で
アルファベットおよびアルファベット+数字で構成された語句を抜き出し
ているのですが、数字だけのものも抜き出してしまいます。
年度など、数字だけで構成されているものを除外するにはどうすればいい
でしょうか?
どうもうまくいかないもので。よろしくお願いします。
195デフォルトの名無しさんsage2006/11/01(水) 18:32:52
>>194
その正規表現で動いたら奇跡だな。

[a-zA-Z][a-zA-Z0-9.]*
196194      2006/11/01(水) 18:49:30
>>195
動いてますよ。文字は全て全角なので。(ちょっとわけありで)
その上で、数字だけを除外するにはどうすれば良いのか、お聞きした
いのです。
197デフォルトの名無しさんsage2006/11/01(水) 18:51:10
それだと数字から始まるものはマッチしなくね?
[a-zA-Z0-9.]*[a-zA-Z][a-zA-Z0-9.]*
こんなのかな
198194      2006/11/01(水) 19:04:08
>>197
それがマッチするんですよ。こんな感じに
Array ( [0] => 2005 [1] => IEEE1394 [2] => 24 [3] => Index
[4] => Java [5] => API [6] => JMF [7] => USB2.0 )
それで、困っておるわけです。
199デフォルトの名無しさん2006/11/01(水) 19:17:50
>>198
>>196で答え出てるよ。
2001992006/11/01(水) 19:18:44
>>195だった・・
201デフォルトの名無しさんsage2006/11/01(水) 19:21:10
>>199
それの不十分さを>>197が補正してるんだな。
202194      2006/11/01(水) 19:25:35
>>200
195,197の正規表現は試してみましたが、動きませんでした。
PHPのなかで使ってるからだろうか・・?
203デフォルトの名無しさんsage2006/11/01(水) 19:30:22
>>195
お前ら.のエスケープ忘れてる。
204194      2006/11/01(水) 19:33:43
>>197
ご無礼をいたしました。普通に動きました。ありがとうございます。
205194      2006/11/01(水) 19:42:14
あと、後学のために、[a-zA-Z]と[a-zA-Z0-9.]がくっついた状態は
どんな意味があるのか、教えていただけるとありがたいのですが
206デフォルトの名無しさんsage2006/11/01(水) 19:44:05
>>205
aa -> aaにマッチ

と同じ
207デフォルトの名無しさんsage2006/11/02(木) 02:29:58
>>203

[] の中なんだから、エスケープの必要はないっしょ。
世の中には記号類と見ればやたらエスケープしたがる人がいるのはよく見るが。
208デフォルトの名無しさんsage2006/11/03(金) 00:54:08
文字列から括弧内(とその括弧)を消去する方法で悩んでいます。

$string = "(foo1)bar1 (foo2 bar2(foo3))bar3((foo4) bar4)";
echo preg_replace(pattern, "", $string);

この例で「bar1 bar3」の出力を期待しますが

/\(.+\)/ なら当然何も残りません。非欲張りの /\(.+?\)/ では入れ子の
部分でおかしくなって「bar1 )bar3 bar4)」となります。
どうかお知恵をお貸しください。
209デフォルトの名無しさんsage2006/11/03(金) 00:57:09
http://capslockabcjp.kitunebi.com/faq.html#htmltag
http://capslockabcjp.kitunebi.com/handmade.html
210デフォルトの名無しさんsage2006/11/03(金) 09:14:04
$string = "(foo1)bar1 (foo2 bar2(foo3))bar3((foo4) bar4)";
while ($string =~ s/\([^(]*?\)//g) {}
print $string;
211208sage2006/11/04(土) 12:36:54
レスありがとうございます。
ややこしそうなんで不等号に置換してstrip_tagsします。
212デフォルトの名無しさんsage2006/11/05(日) 16:58:33
スレを全く読まずに質問

PerlでURLの書式として正しいか、URLとして使用できない文字が含まれていないかをチェックする正規表現教えて
日本語ドメインには対応しなくていいから
213デフォルトの名無しさんsage2006/11/05(日) 17:10:01
>>212
>>1のリンク先くらい嫁
214デフォルトの名無しさんsage2006/11/09(木) 09:17:27
正規表現の事が全くわからないので教えてほしいのですが
2ちゃんねるのBEの表記を正規表現で表すとどうなるのでしょうか?
215デフォルトの名無しさんsage2006/11/11(土) 12:30:37
>214
>1のリンク先くらい嫁
216デフォルトの名無しさんsage2006/11/11(土) 15:21:58
質問ですが、perlでまちBBSのスレをdat化させたいと思って正規表現でやろうとしたんですが出来ません。
htmltodatに入ってる『m/<dt>([0-9]+).+?(?:"mailto:(.+?)">)?<b> (.*?) </b>.*?投稿日: (.*?)<br><dd> ?(.*)<br><br>/mi』じゃダメなんですか?
217デフォルトの名無しさんsage2006/11/11(土) 16:12:17
>>216
まちBBSの書式なんか知らん。
befor-afterのサンプルぐらい出せ。
218デフォルトの名無しさんsage2006/11/12(日) 06:51:19
まちBBSに書き込みしたらIPと住んでる地域バレるじゃん
219デフォルトの名無しさんsage2006/11/12(日) 07:05:05
東京23区板は出ないよ
220216sage2006/11/12(日) 09:30:35
befor
『<dt>149 名前:<a href="mailto:sage"><b> 東京都名無区 </B></a> 投稿日: 2006/11/08(水) 10:26:08 ID:4jNjzvOE<br><dd> 白山ラーメンは営業時間がちょっとね。 <br><br>
<dt>150 名前:<font color="#008800"><b> 東京都名無区 </b></font> 投稿日: 2006/11/08(水) 19:20:35 ID:xKWAFsLU<br><dd> じゃあ素材は中国産か・・。 <br><br>』

after
『東京都名無区<>sage<>2006/11/08(水) 10:26:08 ID:4jNjzvOE<>白山ラーメンは営業時間がちょっとね。 <>
東京都名無区<><>2006/11/08(水) 19:20:35 ID:xKWAFsLU<>じゃあ素材は中国産か・・。 <>』
こういう感じにしたいんです。
221デフォルトの名無しさんsage2006/11/14(火) 16:18:04
同じ文字が3個以上続いている行を表示するにはどうしたらいいですか?
222デフォルトの名無しさんsage2006/11/14(火) 19:34:53
>>221
grepでピリオドとbackreferenceを使ってちょ。
223デフォルトの名無しさんsage2006/11/14(火) 19:41:56
/(.)\1\1/
224デフォルトの名無しさん2006/11/15(水) 00:09:45
regular expressionを「正規表現」って訳した奴は氏ね!
どう考えても「規則表現」あたりだろーが。
それに「せいきひょうげん」とか口に出して言うのって
なんか恥ずかしいじゃねーか。
225デフォルトの名無しさんsage2006/11/15(水) 01:32:30
>>224 どう考えても

考えないで「勉強」してよ。
226デフォルトの名無しさんsage2006/11/15(水) 22:52:02
共立のエイホウルマン本では「正則表現」と訳されてますがな。
227デフォルトの名無しさんsage2006/11/15(水) 23:03:25
性器表現((゚)) Ψ
228デフォルトの名無しさんsage2006/11/16(木) 00:00:14
MacやMACやMaC OSXやmac osXにはヒットしても
macafeeやMacAfeeにはヒットしない正規表現はどう書けばよいのでしょうか。
229デフォルトの名無しさんsage2006/11/16(木) 00:07:56
/\bmac\b/i
230デフォルトの名無しさんsage2006/11/16(木) 00:22:07
>>216
とりあえず面白そうなので
http://jbbs.livedoor.jp/bbs/read.cgi/computer/1929/1038588508/
で聞いてみてはどうです?
231デフォルトの名無しさんsage2006/11/17(金) 16:59:43
>>224
賛同++
232デフォルトの名無しさんsage2006/11/20(月) 04:23:05
正規表現で置換しまくりんぐフヒヒ
233デフォルトの名無しさんsage2006/11/20(月) 07:49:26
重くなりそう
234デフォルトの名無しさん2006/11/21(火) 13:00:04
すいません。ちょっと探しても見つからなかったのですが、
[AaAa][IiIi][UuUu]
という正規表現を分解して、マッチする文字列を出してくれるツール、
もしくはC#あたりでそういった方法などは無いでしょうか?
235デフォルトの名無しさんsage2006/11/21(火) 13:17:55
>>234
*とかあったらどうすんのさ。

本当に正規表現関連の質問なのか?
組み合わせ論の話なんじゃ?
236デフォルトの名無しさんsage2006/11/21(火) 13:33:47
>>235
*とかはありません。
[Aa]のパターンだけなんですが、如何せん量が多くて
自分で分解して1つ1つ書いていくのは不可能なのです。
何か良い方法は無いか探してるんですが・・・
237デフォルトの名無しさんsage2006/11/21(火) 13:42:42
正規表現のままでいけない理由は?
238デフォルトの名無しさんsage2006/11/21(火) 13:58:54
あったけどサイトごと消失
239デフォルトの名無しさんsage2006/11/21(火) 15:10:31
4進数3桁
240234sage2006/11/21(火) 17:06:08
>>237
リストを渡す相手が正規表現を知らず、全部並べて書いてくれと言われまして……
241デフォルトの名無しさんTage2006/11/21(火) 17:07:25 ?2BP(0)
ワロスw
242デフォルトの名無しさんsage2006/11/21(火) 17:08:07
正規表現を教えた方が早そうだな
243デフォルトの名無しさんsage2006/11/21(火) 19:22:57
ご愁傷様としか言いようがない。
244234sage2006/11/21(火) 19:42:25
人生オワタ\(^o^)/
245デフォルトの名無しさんsage2006/11/21(火) 20:38:55
数式の展開と同様だよね。

Maxima 5.9.1 http://maxima.sourceforge.net
Using Lisp Kyoto Common Lisp GCL 2.6.5 (aka GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) expand((a1+a2+a3+a4)*(i1+i2+i3+i4)*(u1+u2+u3+u4));
(%o1) A4 i4 u4 + A3 i4 u4 + A2 i4 u4 + A1 i4 u4 + A4 i3 u4 + A3 i3 u4
+ A2 i3 u4 + A1 i3 u4 + A4 i2 u4 + A3 i2 u4 + A2 i2 u4 + A1 i2 u4 + A4 I1 u4
+ A3 I1 u4 + A2 I1 u4 + A1 I1 u4 + A4 i4 u3 + A3 i4 u3 + A2 i4 u3 + A1 i4 u3
+ A4 i3 u3 + A3 i3 u3 + A2 i3 u3 + A1 i3 u3 + A4 i2 u3 + A3 i2 u3 + A2 i2 u3
+ A1 i2 u3 + A4 I1 u3 + A3 I1 u3 + A2 I1 u3 + A1 I1 u3 + A4 i4 u2 + A3 i4 u2
+ A2 i4 u2 + A1 i4 u2 + A4 i3 u2 + A3 i3 u2 + A2 i3 u2 + A1 i3 u2 + A4 i2 u2
+ A3 i2 u2 + A2 i2 u2 + A1 i2 u2 + A4 I1 u2 + A3 I1 u2 + A2 I1 u2 + A1 I1 u2
+ A4 i4 u1 + A3 i4 u1 + A2 i4 u1 + A1 i4 u1 + A4 i3 u1 + A3 i3 u1 + A2 i3 u1
+ A1 i3 u1 + A4 i2 u1 + A3 i2 u1 + A2 i2 u1 + A1 i2 u1 + A4 I1 u1 + A3 I1 u1
+ A2 I1 u1 + A1 I1 u1
(%i2)
246デフォルトの名無しさんsage2006/11/21(火) 21:02:47
文字化けしたらすまん。

aa1="A a $(B#A(B $(B#a(B";aa2="I i $(B#I(B $(B#i(B";aa3="U u $(B#U(B $(B#u(B"; for bb1 in $aa1; do for bb2 in $aa2; do for bb3 in $aa3; do echo $bb1$bb2$bb3; done; done; done
247デフォルトの名無しさんsage2006/11/21(火) 22:37:02
どうでもいいけど、絨毯爆撃テストに頼ってるだけじゃ条件漏れでそのうち嵌るよ。
248デフォルトの名無しさんsage2006/11/21(火) 22:57:56
>>234
文字の範囲が決まってる(アルファベットだけとか)なら、
全組み合わせのテキストファイル生成して、
エディタで引っ掛けるなりgrepするなりするってのはどう?
249デフォルトの名無しさんTage2006/11/21(火) 22:59:14
>>248
だからその
>全組み合わせのテキストファイル生成
してくれるツールは無いかって聞いてるんじゃん。
250デフォルトの名無しさん2482006/11/21(火) 22:59:39
って、正規表現わからないから、って言われてるのか。

ならやるべきことはリストで出すことじゃなくて、
今の正規表現を図か何かにわかりやすく起こして
説明してわかってもらうことじゃないの?
251デフォルトの名無しさん2482006/11/21(火) 23:00:51
>>249
ああ、いや、例えばアルファベット小文字10文字って決まってたら
aaaaaaaaaaからzzzzzzzzzzまで全部テキストファイルに書いて
引っ掛ける、ってな意味。限定されてないと無理だけど。
252デフォルトの名無しさんTage2006/11/21(火) 23:03:13
>>251
だからその全パターンを正規表現からおこして列挙してくれるツ(ry
253デフォルトの名無しさんsage2006/11/21(火) 23:08:49
vbs だけど... コマンドプロンプトから cscript xxx.vbs ってやってちょ

--- xxx.vbs
Option Explicit
Dim X
X = "[AaAa][IiIi][UuUu]"
With New RegExp
 .Global = True
 .Pattern = "\[([^\]]*)\]"
 Dim Matches
 Set Matches = .Execute(X)
 Call Foo(Matches, 0, "")
End With

Private Sub Foo(Matches, Level, String)
 If Level < Matches.Count Then
  Dim S
  S = Matches.Item(Level).SubMatches(0)
  Dim I
  For I = 1 To Len(S)
   Call Foo(Matches, Level + 1, String + Mid(S, I, 1))
  Next
 Else
  WScript.StdOut.WriteLine String
 End If
End Sub
254デフォルトの名無しさんsage2006/11/21(火) 23:37:06
そんなにニーズあるのなら年末にでも開発するけど
ダウンロード一桁とかじゃないだろうな(w
255デフォルトの名無しさんsage2006/11/22(水) 01:45:28
254氏キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
256デフォルトの名無しさんsage2006/11/22(水) 13:32:00
頑張ってつくったところで
サイズがでかすぎるテキストファイルになって
重くて相手にされない予感
257デフォルトの名無しさんsage2006/11/22(水) 15:46:11
[^a]
とか入って来たら死にそうな感じがするが
258デフォルトの名無しさんsage2006/11/22(水) 17:03:54
死なない。そういうのをちゃんと扱えて
事前に計算量を予測できる、
UTF-8でも大丈夫なアルゴリズムがあるの。
259デフォルトの名無しさんsage2006/11/22(水) 17:25:31
[01]を100個ぐらい並べただけで相当な数になるわけだが。
260デフォルトの名無しさんsage2006/11/22(水) 17:40:36
なるけどそれを予測できればいいわけ。
1000超えたら中止とか設定するの。
261デフォルトの名無しさん2006/11/22(水) 20:00:10
>>260
それ、何かの解決策になってる?
262デフォルトの名無しさんsage2006/11/22(水) 20:38:16
>>260
目的を果たしてないぞw
263デフォルトの名無しさんsage2006/11/22(水) 22:50:13
それなんて注文の多い料理店。
組み合わせだすなんて不毛なことより
どっちかというと視覚化のほうをやりたい。
264デフォルトの名無しさんsage2006/11/23(木) 18:38:56
正規表現で結婚相手を見つけるにはどうしたらいいですか?
265デフォルトの名無しさんsage2006/11/23(木) 20:56:43
*女
266デフォルトの名無しさんsage2006/11/23(木) 21:50:36
性器表現するにはどうしたらいいですか?
267デフォルトの名無しさんsage2006/11/23(木) 22:12:11
お?(ちん(ちん|ぽこ?|こ)|(まん|め)こ)


268デフォルトの名無しさんsage2006/11/23(木) 22:29:56
ぼぼが表現されんようだが
269デフォルトの名無しさんsage2006/11/23(木) 22:58:24
申し訳ありませんが、方言につきましては別途料金が発生いたします。
よろしいでしょうか?
270デフォルトの名無しさんsage2006/11/24(金) 02:46:08
OK キャンセル いいから一発やらせろよ
271デフォルトの名無しさんsage2006/11/24(金) 17:20:28
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< 問題:「同じ数の繰り返しがない数字列すべて」を示す正規表現は?

  (    )  \_____
  | | |
  (__)_)
272デフォルトの名無しさんsage2006/11/24(金) 17:32:26
そうやって知りたいだけじゃねーか。
ちったぁ自分で考えろや
273デフォルトの名無しさんsage2006/11/24(金) 19:46:16
同じ数の繰り返しがないって意味わかんない
274デフォルトの名無しさんsage2006/11/24(金) 19:54:56
grep -v "\(.\)\1"

?
275デフォルトの名無しさんsage2006/11/24(金) 21:51:15
>>271, >>273
おれは、「すべて」の意味もわかんない
276デフォルトの名無しさんsage2006/11/25(土) 10:42:10
>>271
>>1
277デフォルトの名無しさんsage2006/11/25(土) 16:00:53
>>273
同じ数字が隣にこない、と言えばいいだろうか
113はダメ、131はおk

>>275
全部です。数字一個の列も数字百個の列も表現できろってことです。

俺のまわりの連中は馬鹿だから誰もわかりません
勿論俺もわかりません
278デフォルトの名無しさんsage2006/11/25(土) 16:26:36
(\d)(?!\1)
279デフォルトの名無しさんsage2006/11/25(土) 16:28:08
ああ、列ってのは連なりってことなのかな。
だとしたらこうか。
((\d)(?!\1))+
280デフォルトの名無しさんsage2006/11/25(土) 16:32:01
違うわ。こうか。

((\d)(?!\2)){2,}
281デフォルトの名無しさんsage2006/11/25(土) 20:16:00
>>278
>>280

全然ダメ

>>277
987654321
1
98
988
678678

これはどれがマッチするとか例をかいたら?
282デフォルトの名無しさん2006/11/25(土) 20:26:05
ダメって言うなら正規表現書いてみろ
283デフォルトの名無しさんsage2006/11/25(土) 21:18:32
これだけ偉そうなんだから、きっとずばっと正解書いてくれるよ
284デフォルトの名無しさんsage2006/11/25(土) 21:47:19
オライリーの本を読めば正解が分かる
ヒントは
?!
285デフォルトの名無しさんsage2006/11/25(土) 22:35:06
VBS だが
-----
Option Explicit
Dim X, R
For Each X In Array("1", "113", "131", "987654321", "1", "98", "988", "678678")
  With New RegExp
    .Pattern = "^(?:(\d)(?!\1))*$"
    If .Test(X) Then R = "Match" Else R = "Not Match" End If
    WScript.StdOut.WriteLine X & ": " & R
  End With
Next
-----
1: Match
113: Not Match
131: Match
987654321: Match
1: Match
98: Match
988: Not Match
678678: Match
286デフォルトの名無しさんsage2006/11/26(日) 05:29:10
>>281
○987654321
○1
○98
×988
○678678

この正規表現を連接・選択・スターだけで書けって言うんだ…
無茶しやがって
287デフォルトの名無しさんsage2006/11/26(日) 12:05:37
ヒント
同じ数字が連続するのは10種類しかない
288デフォルトの名無しさんsage2006/11/26(日) 12:52:58
123123もダメな事になりました
289デフォルトの名無しさんsage2006/11/26(日) 13:43:10
>>286
オライリーの本を読めば正解が分かるな
ヒントは否定先読み

>>1
のリンク先を全て読んでもいいけどな
290デフォルトの名無しさんsage2006/11/26(日) 14:50:35
ちょっと流れからはずれるんだが、疑問に思ったこと
Perl5など最近の言語処理系がサポートしているいわゆる正規表現が既に
本来の意味での正規表現ではなくなっているというのは有名な話だけど
じゃあ、そのいわゆる正規表現が表現できる言語のクラスってどんなの
なんだろう?色んなところの例を見た限りでは、少なくとも文脈自由言語の
一部を表現できるようだけど
291デフォルトの名無しさんsage2006/11/26(日) 17:25:55
文脈自由文法は表現できるよ。
だから自然言語処理で、正規表現がよく使われたりする。
292デフォルトの名無しさんsage2006/11/26(日) 20:03:21
>>291
つまり、「任意の」文脈自由文法をPerl5などで拡張された「いわゆる」正規表現
で表現できるってこと?もしそうだったら、どっかにそれを証明した論文がある
はずなんだけど論文へのポインタか何か知ってたら教えて
293デフォルトの名無しさんsage2006/12/06(水) 00:55:21
[00:00.00]
[00:08.05]
[00:20.32]
こんなのを
[00:00]
[00:08]
[00:20]
に書き換える正規表現教えてください
294デフォルトの名無しさんsage2006/12/06(水) 01:28:44
書き換える作業は各自でお願いします。
295デフォルトの名無しさんsage2006/12/06(水) 03:42:17
s/\(\[.....\)...]/\1]/
s/\(\[[0-9][0-9]:[0-9][0-9]\)\.[0-9][0-9]]/\1]/
296293sage2006/12/06(水) 17:36:11
>>295
ありがとうございました
297デフォルトの名無しさん2006/12/07(木) 00:53:22
aaabbbccc と bbb を取りたい
括弧の中に括弧っていいんですか?

/(aaa(bbb)ccc)/

298デフォルトの名無しさんsage2006/12/07(木) 01:26:39
かっこわるいー
299デフォルトの名無しさん2006/12/07(木) 03:42:49
(e)
300デフォルトの名無しさんsage2006/12/07(木) 03:50:18
>>291
balanced parenthesesは拡張された正規表現でどう書くの?
301デフォルトの名無しさんsage2006/12/07(木) 09:11:27
>>300
perlの正規表現のマニュアルの (??{ code }) のところにそのものずばりの例がある。

$re = qr{
\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
}x;

ttp://perldoc.perl.org/perlre.html
302デフォルトの名無しさんsage2006/12/07(木) 17:51:10
>>301
\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
は(??{ code })でコードが埋め込まれることで言語依存になってしまうが
拡張された正規表現ではある。しかしその外側は正規表現ではないのでは?
単なるperlの文に見えるのだが。
303デフォルトの名無しさんsage2006/12/08(金) 01:36:15
>>300

こーゆーのもある(,NETね)

Regex re = new Regex(@"^
  (?>
      \( (?<LEVEL>)   # On opening paren push level
    |    
      \) (?<-LEVEL>)  # On closing paren pop level
    |
      (?! \( | \) ) . # Match any char except ( or ) 
  )+
  (?(LEVEL)(?!))      # If level exists then fail
  $", RegexOptions.IgnorePatternWhitespace);
304デフォルトの名無しさんsage2006/12/08(金) 19:50:29
HTMLを取得してタグをすべて除去するperlスクリプトを書いているんですが、
javascriptだけは残ってしまいます。
正規表現でjavascriptを消去するやり方はないんでしょうか?
色々試してもさっぱりダメ……
305デフォルトの名無しさんsage2006/12/08(金) 20:46:44
scriptの開始タグ〜終了タグを除去すればいい
306デフォルトの名無しさんsage2006/12/09(土) 03:54:02
HTMLタグ除去って perldoc 見れば一発だし
行儀よく <!-- hoge --> に囲まれてれば
JavaScript だって一緒に消されるっしょ?

うまいことコメントアウトされてないようなら
先に script 回りだけ同じようにばっさり切ればいいし
307デフォルトの名無しさんsage2006/12/09(土) 16:17:09
もうだめなんだよ
308デフォルトの名無しさんsage2006/12/10(日) 11:42:44
>>305
まあ、君の言うことは正しいんだけど、その「終了タグ」を
見つけるのが大変と言うことだ。

文字列やコメント中に </script> とか書いてるのをきちんと
はじくのはちょっと骨が折れる。
309デフォルトの名無しさんsage2006/12/10(日) 19:35:00
Fx1.5からはE4Xがあるから、粉砕骨折するだろうね。
310デフォルトの名無しさんsage2006/12/10(日) 19:51:58
亀裂骨折はこの間したけどな
いてえよ
311デフォルトの名無しさんsage2006/12/14(木) 13:00:06
>>306
それ Unicode で
http://openmya.hacker.jp/hasegawa/public/20061209/momiji.html

xss考慮するとけっこう対応は大変だぞ
312デフォルトの名無しさんsage2006/12/15(金) 13:57:42
HTMLのタグ除去に似ているのですが今HTMLタグ以外の部分を(.*?)に置き換える正規表現をjavaで考えています.
判りにくいと思いますので例を言うと
<font><a href="(.*?)" target="_blank">Recycled Niceguys</a></font color="red">
<font><a href="(.*?)" target="_blank">(.*?)</a></font color="red">
こんな感じに変換にしたいのです.
今自分で考えたのは
((?:<.*?>)*)(?:.*?)((?:<.*?>)*)
group(1) + "(.*?)" + group(2)
こうなのですがうまく変換できません.
何処が間違っているのでしょうか?
ご教授お願いします.
313デフォルトの名無しさんsage2006/12/15(金) 17:49:10
タグの定義が分からない
value = ">"
を考慮するかとか書いてないし
よって回答不能
314デフォルトの名無しさんsage2006/12/15(金) 22:18:33
終了タグに属性書くのはかなりレベル高いボケだなw
315デフォルトの名無しさんsage2006/12/15(金) 22:24:29
<input name=dir value=">">
316デフォルトの名無しさん2006/12/16(土) 02:22:56
PHPです
URLの test.php?a=123&b=456 から a が欲しいので
/a\=(.+?)\&/
としていたのですが、test.php?a=123 だけで終わる場合があることが分かったのですが、
&または行末としたいのですが、
/a\=(.+?)[\&$]/
では行末の場合ヒットしてくれません
ご教授願えないでしょうか?
317デフォルトの名無しさんsage2006/12/16(土) 02:33:12
/a\=(.+?)(\&)?/
じゃ駄目なの?
318デフォルトの名無しさんsage2006/12/16(土) 13:31:22
>>316
/a=([^&]+)/
319デフォルトの名無しさんsage2006/12/16(土) 13:37:32
>>316
PHPなら
$_GET["a"]
じゃあかんの?
320デフォルトの名無しさんsage2006/12/18(月) 06:21:34
>>316は恥で狂い死んだらしい
321デフォルトの名無しさんsage2006/12/20(水) 06:06:00
test
322デフォルトの名無しさんsage2006/12/25(月) 19:36:44
どなたかご指導お願いします。
Flashで読み込む用に、
kuji=***(ランダムで変わる大吉から凶まで)
という文字列だけを出力するkuji.phpを作りました。

さらに、この***の部分だけをmain.phpに読み込んで
ランダムで変わる部分だけを表示したいのですが、
include('kuji.php');
で読み込んだあと、「kuji=」の部分を削って***だけ表示するには
どのようにすれば良いのでしょうか?PHPのバージョンは4.0.6です。
323デフォルトの名無しさんsage2006/12/25(月) 20:08:17
それは正規表現使わない方が良いと思うんです。
324デフォルトの名無しさん2006/12/25(月) 22:14:59
正規表現でand検索ってどうやるんだっけ?

「ジョージアのコーヒー」
「コーヒーはジョージア」


「コーヒー」「ジョージア」
だけを使って2文にマッチさせたい。

ジョージア.*コーヒー
だと1文目はヒットするが、2文目はヒットしない。
325 ◆TWARamEjuA sage2006/12/25(月) 22:53:31 ?BRZ(6677)
m#(コーヒー)|(ジョージア)#
ではなくって?釣り?
326 ◆TWARamEjuA sage2006/12/25(月) 22:55:12 ?BRZ(6677)
あらやだ(照)∧||∧
327デフォルトの名無しさん2006/12/25(月) 23:26:43
んーどちらか一方ではなくて、2つの条件を満たしてマッチさせたいわけです。

たとえば
「ジョージアのコーヒー美味しいね。」
「ジョージアよりポッカの方が良い。」
という場合もあった場合に、一つ目だけをマッチさせて、二つ目を省きたいのです。

検索条件のand検索の様な事はできるのかなと思って質問しました。


328デフォルトの名無しさん2006/12/25(月) 23:29:12
という場合もあった場合に、一つ目だけをマッチさせて、二つ目を省きたいのです。

という場合もあった場合に、一文目だけをマッチさせて、二文目を省きたいのです。
329デフォルトの名無しさんsage2006/12/26(火) 00:12:35
>>327
基本的には組み合わせの数だけorでつなぐ正規表現になると思う
例えばこんな感じで

(ジョージア.*コーヒー|コーヒー.*ジョージア)
330デフォルトの名無しさん2006/12/26(火) 01:21:40
そうですか・・・。
正規表現でスマートに実装できるかなと思ったのですが。
単語が3個4個と増えてくると結構コードが汚くなってきますよね。
とりあえず今は仕様ということで諦めるしかない様ですね。
331デフォルトの名無しさんsage2006/12/26(火) 02:04:09
名前つきキャプチャとかで、「どれがマッチしたか」が分かる言語なら
325みたくorでマッチさせておいて、その後に「全部マッチしたやつ」を
探せばいいのでは
332デフォルトの名無しさんsage2006/12/27(水) 02:13:25
(?=.*ジョージア)(?=.*コーヒー).*
333デフォルトの名無しさんsage2006/12/27(水) 13:37:26
すみません教えて下さい
----
ABCD
こんにちは
こんばんわ
さようなら
EFGH
----
上のABCDとEFGHに挟まれる複数行の文字列を
取得するには、どのような記述にしたら
良いでしょうか?
334デフォルトの名無しさんsage2006/12/27(水) 15:22:06
http://pc7.2ch.net/test/read.cgi/software/1163847543/155
http://pc8.2ch.net/test/read.cgi/tech/1156413899/333
335デフォルトの名無しさんsage2006/12/27(水) 16:56:49
>>327
>>1
のリンク先嫁
336デフォルトの名無しさんsage2006/12/28(木) 12:05:35
SQLの
...where ID like 'EE%' and ID <> 'EEXX'
という条件を正規表現でやろうと思います。

エディタの正規表現検索で確認した感じだと「^(?!EEXX)EE.*$」でいけそうなんですけど、
大丈夫でしょうか?
337デフォルトの名無しさんsage2006/12/28(木) 15:36:43
>>332
これでいいんだ...。orz

どうも肯定先読みの説明ってどこ見ても意味がとりにくい。

どっかにすっきりした解説がないもんだろうか。
338デフォルトの名無しさん2006/12/28(木) 23:20:02
こんばんは。
掲示板の本文欄の書き込みでの質問です。

<a href=http://www.example.com>ホゲ</a> または
<a href="http://www.example.com">ホゲ</a> から、正規表現を使って、

ホゲ の文字をリンク状態にしてページに表示させたいのですが、
どのようにしたら良いのでしょうか?
お願いします。教えてください。
339デフォルトの名無しさんTage2006/12/28(木) 23:40:12
意味不明。
><a href=http://www.example.com>ホゲ</a>
この時点で既にリンクされてるじゃん。
340デフォルトの名無しさんsage2006/12/28(木) 23:49:07
>>339
”ホ”の前に”>”を入れたいんじゃないのかな?
341デフォルトの名無しさんsage2006/12/29(金) 00:22:46
>>340
それもまた意味不明
342デフォルトの名無しさん2006/12/29(金) 01:46:58
理由は不明ですが、解決しました。ありがとうございました。
343デフォルトの名無しさんsage2006/12/29(金) 04:03:33
これは裏政府の暗号に違いないっ!
344デフォルトの名無しさんsage2006/12/29(金) 22:16:14
秀丸の正規表現なんですが
hogehoge::と書いた時に「::」より前だけヒットさせる正規表現は.*(?=::)と
書いてうまくいっていますが、↑と別に
hogehoge:だけヒットさせるには何と書けばいいのでしょうか?
一応.*(?=:{1})で試したらhogehoge::にも引っかかってしまいますた
345デフォルトの名無しさんsage2006/12/29(金) 23:58:55
>>344
hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
hogehoge(?=:[^:])
でどう?

346デフォルトの名無しさんsage2006/12/30(土) 00:00:51
>>337
そんなにわかりづらいか?
マッチを試みてその結果はあとに影響するけど、注目位置は変えないって
ことだけだと思うんだけど。
347デフォルトの名無しさんsage2006/12/30(土) 10:26:26
>>345
ありがとう!
> hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
そうなんです。ですがhogehoge(?=:[^:])だとhogehoge:にも引っかかりませんでした…
あと試したのが↓で、hogehoge::とhogehoge:両方に引っかかってしまいました
.*(?=:(?!:))
難しい・・・他にイイ案はありますでしょうか?
348345sage2006/12/30(土) 13:53:19
>>347

条件見てC++のソースでも食わせると思ったのだけど違うのかな?
345の条件だと、hogehoge: の':' で行が終わるとマッチしないよ。
hogehoge(?=:(?:[^:]*$))
でどうだろう。

> .*(?=:(?!:))
これだと.*が一個目の:を飲み込んじゃうのを許しちゃうよ。
hogehogeに固定の文字列じゃなくて何らかの正規表現を置きたいなら、
hogehoge部分にコロンがこないという前提を置いていいなら、
[^:]*(?=:(?:[^:]*$))
かな。

いずれにしろ今回だめだというなら条件をもう少し詳しく提示してね。
349デフォルトの名無しさんsage2006/12/30(土) 15:28:21
どうも有難うございます!
2つとも 「正規表現での'|'の前後の文字が無いかまたは + * ? の直前に文字がありません」
というエラーが出て登録できませんでした

プログラミングから縁遠い者がAutohotkeyのスクリプトを書いております
エディタは秀丸を使っているのでスクリプトを所々強調表示したいなーと思い
Hotkey::(コロン2つ)とLabel:(コロン1つ)を別々にヒットさせたいんです
350345sage2006/12/30(土) 16:04:51
>>349
Autohotkeyも秀丸も使ってないので試せないのだけど(秀丸は昔は使っていた)、
Perlではちゃんとうごいってるっぽいんだけどねえ。
でもちょっと勘違いして変な記述をしていたので直してみた

[^:]+(?=:[^:]*$)

あとエラーメッセージは秀丸の?
あとでインスコして試してみるけど、打ち間違いってことはない?
期待しないところでマッチするのはあってもエラーはないと思うんだけどなあ

351デフォルトの名無しさんsage2006/12/30(土) 16:10:22
>>346
「その結果はあとに影響する」と言うのがいまいちピンとこない。

でも今まで見た中では一番よくわかる解説だと思う。

[よくない例]

perlreref:

(?=...) ゼロ幅の肯定先読み表明

Microsoft VBScript の RegExp の説明:

肯定先読みを実行する部分式です。
pattern に一致する文字列が始まる位置にある検索文字列と一致します。
一致した文字列は記憶されず、後で使用することはできません。
たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows"
には一致しますが、"Windows 3.1" の "Windows" には一致しません。
先読み処理では、読み進まれた文字は処理済みとは見なされません。
一致の検出後、次の検索処理は先読みされた文字列の後からではなく、
一致文字列のすぐ後から開始されます。

こんな説明にみんなちゃんと理解できてるの?
352デフォルトの名無しさんsage2006/12/30(土) 16:23:11
>>350
それでできました!ありがとうござます!

>あとエラーメッセージは秀丸の?
そうです。コピペでやってるんですが>>348だと登録時にエラー出ました
>>350で完璧です!今から意味を理解してみますw
353デフォルトの名無しさんsage2006/12/30(土) 16:28:56
マッチするかどうかの判定には使われるけど、その部分はマッチしない。
354346sage2006/12/30(土) 16:57:46
>>351
んーとね、「結果があとに影響する」というのは
(?=foo).*
マッチを試みるやり方は先読みでないときと同じでマッチに成功したか失敗したかで
その先に進むかどうかが決まる。マッチした部分は保存しないし、注目位置は変化しない
というつもりだったんだけど。

>こんな説明にみんなちゃんと理解できてるの?

説明で理解したってかどちらかというと実際に使ってみてどういう動きをするかで
覚えた感じかなあ。
最初のPerlで実装されたときから使ってるから、ほかの言語での説明はあまり気にしなかったよ。
355345sage2006/12/30(土) 17:01:27
>>352
秀丸で348のパターンがエラーになるのは確認した。
なんでこんなメッセージになるのかよくわからんがw

356デフォルトの名無しさんsage2006/12/30(土) 17:49:48
>>355
重ね重ねすみません!

あちこちヒットしてしまうようになったのでw
Label:(行末)
だけにヒットするにはどうしたらいいんでしょう・・
秀丸ヘルプを引きながら理解しようとしてますが
[^:]+(?=:[^:]*$)←自分がいじるとことごとく失敗します
357デフォルトの名無しさんsage2006/12/30(土) 18:33:10
Label:$
358デフォルトの名無しさんsage2006/12/30(土) 19:33:21
…_| ̄|○

一応試したのがこれですw
[^:]+(?=:[^:]*{0}$)
359デフォルトの名無しさんsage2006/12/30(土) 22:46:29
>>344
よくばりマッチとかでぐぐれ
360345sage2006/12/30(土) 23:58:33
>>356
AutoHotKeyとやらの解説ページ見たんだけどさ、要は
コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?

解説ページの記述によればコロン一つの行はラベルとコロンで行が終わってなければ
いけないようなことが書いてるから、357にあるように
^[^:]*;$
にしといて、コロン二つのほうは行のいろんなところに使えるみたいだけど行頭だけに絞るなら
^[^ ]*::
くらいににしとけば?

ラベル名は多分アルファベットだけで記号は使えないような気がするのでその辺で
絞ってもいいけど。

ピンポイントで解決したいこと書くより最終的に何をしたいのかを書いたほうが
いいアドバイスをもらいやすいってのはあると思うよ。
361デフォルトの名無しさんsage2006/12/31(日) 00:15:20
>>354
詳しい説明ありがとう。

大体理解できた






...と思う。m(_._)m
362デフォルトの名無しさんsage2006/12/31(日) 12:43:33
>>359-360
345さん!シンプルに^[^:]*:$と^[^ ]*::で登録しました
>コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?
そうなんです。説明足らずですみません
よくばりマッチも勉強します
[^:]+(?=:[^:]*$)もなんとか理解できたと思いますw

本当にありがとうございました!感謝感謝です
363デフォルトの名無しさん2007/01/01(月) 21:13:05
PHPを使っています。
&を&におきかえたいんですけど、
今のところ、&を&に置き換えるという単純なことをしています。
ただこれだと、
&という入力があったら、&amp;という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。

正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
& " <などの実態参照は除外したいです。
3643632007/01/01(月) 21:14:30
すみません。書き直します。

PHPを使っています。
&を&amp;におきかえたいんですけど、
今のところ、&を&amp;に置き換えるという単純なことをしています。
ただこれだと、
&amp;という入力があったら、&amp;amp;という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。

正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
&amp; &quot; &lt;などの実態参照は除外したいです。
365デフォルトの名無しさんsage2007/01/01(月) 21:29:44
>>364
&amp;を&に置き換えた後&を&amp;におきかえれば?
366デフォルトの名無しさんsage2007/01/01(月) 21:31:27
&amp;を&に置き換えてそのあと&を&amp;に置き換えるとか
367デフォルトの名無しさんsage2007/01/01(月) 21:32:22
かぶったー
368デフォルトの名無しさんsage2007/01/01(月) 21:37:32
&&
369デフォルトの名無しさんsage2007/01/01(月) 21:40:31
これでどうだ?
&amp;
3703632007/01/01(月) 21:44:30
>>365-366
ありがとうございます。
早速やってみたところ、&amp;は思い通りになりました。
しかし、他の実体参照文字(&quot;等)では、
&amp;quote;という風になってしまいますorz
371デフォルトの名無しさんsage2007/01/01(月) 21:44:46
if (!変数 =&amp;) {
&を&amp;に置き換える
}
3723632007/01/01(月) 21:48:12
と思いましたけど・・・

&amp;quot;でも表示上は一緒でしたね。
&quot;

どうも皆様ありがとうございました!
373デフォルトの名無しさんsage2007/01/01(月) 23:45:15
まあ、解決したみたいだから何よりなんだけど、
そもそも & と &amp; が混在していると
言う設計がおかしいのではないの?
374デフォルトの名無しさん2007/01/03(水) 13:35:53
PHPの置き換え処理で、文字列があったら、その文字列に置き換える
(つまり同じ文字列を出力する)
ということをしたいのですが、マッチした文字列をどう表現すればいいのかわかりません。
ereg_replace(".*", ".*", $str);
というようなことをしたいのですが、
第2パラメータをどう書けばいいのかわかりません。
上の例だと、そのまま.*という文字列が出力されてしまいます。
どなたかお助けください。
375デフォルトの名無しさんsage2007/01/03(水) 14:06:18
preg_replace("/(.*)/", "\\1", $str);
動くかはしらん
376デフォルトの名無しさん2007/01/03(水) 14:21:13
>>375
見事できました!
実は置き換え対象で\\1を指定したのに置き換えられなくて、
悩んでいたのですが、()で囲む必要があったんですね。
勉強になりました。どうもありがとうございました。
377デフォルトの名無しさん2007/01/10(水) 11:49:44
最近 「字句解析処理系の生成ツール flex」 というのを知ったんだけど
C言語から使う場合 regex.h とどっちが早いの?
regex.h 遅いってイメージがあるんだけど・・・
378377sage2007/01/10(水) 13:17:48
勘違いしてました。ごめんなさい
379デフォルトの名無しさんsage2007/01/10(水) 21:12:03
↑誰だよオマエ
380デフォルトの名無しさんsage2007/01/11(木) 07:42:12
ORACLE10gのREGEXP_LIKEを使っています。

訳あってOR、ANDを正規表現で行っています

SELECT * FROM TEST WHERE
REGEXP_LIKE(text,'(あいう)|(ABC)|(xyz)')
上のSQLであいうまたはABCまたはxyzというOR検索は可能ですが
AND検索の正規表現がどうしてもできません。

知恵をかしてください。


381デフォルトの名無しさん2007/01/13(土) 16:08:13
PHPのpreg_matchでの質問です。

$template_src = preg_replace("/\\\[/","[",$template_src);
上のように、データ内に存在する\[を、ただの[へ置換したいのですが、
Compilation failed: missing terminating ] for character class at offset 3
という警告が出てしまいます。

自分では、\\で\として扱われているのかが怪しいと感じているのですが・・
これはどのようにすれば解決できるのでしょうか?

ご教授下さいませ。
382デフォルトの名無しさんsage2007/01/13(土) 16:10:56
preg_replace('/\[/',"[",$template_src)
3833812007/01/13(土) 16:23:51
>>382
$hoge = '\[hoge\]';
$hoge = preg_replace('/\[/',"[",$hoge);
echo $hoge;

\[hoge\]が出力されてしまいます。
シングルクオートで囲んでも、\[はただの[として認識されているようです。
または、私何か間違った認識をしているのでしょうか・・?
384デフォルトの名無しさんsage2007/01/13(土) 16:33:41
>>383
preg_replace('/\x2F\[/', '[', $hoge);
385381sage2007/01/13(土) 16:34:07
\\\\で\を表現するそうです。
笑ってください。

ありがとうございました。
386デフォルトの名無しさん2007/01/14(日) 01:09:06
複数のパターンを含まない正規表現はどう記述すれば良いのでしょうか。
387デフォルトの名無しさんsage2007/01/14(日) 05:15:51
>>386 例えば?
3883862007/01/14(日) 14:41:08
>>387
/\[([a-zA-Z]+)\]/ と /\[\/$1\]/ に挟まれていて、尚且つ /<br \/>/ と /\[\/?[a-zA-Z]+\]/ を含まないパターン、などです。

/\[([a-zA-Z]+)\](?:(?!<br \/>)(?!\[\/?[a-zA-Z]+\]).)*\[\/$1\]/

かと思ったのですが、違うようなのです。
389デフォルトの名無しさんsage2007/01/16(火) 13:07:41
無理して正規表現一本でやろうとしなくてもいいんじゃないかな
390デフォルトの名無しさん2007/01/17(水) 15:53:02
>>388
>>1
にある
391デフォルトの名無しさんsage2007/01/19(金) 13:40:05
いいところ見つけた。ちょっと確認する程度なら環境整えなくて済む。

http://lab.moyo.biz/tools/regexp/index.jsp
392デフォルトの名無しさん2007/01/23(火) 11:17:31
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4871&forum=7
を参考に全角文字列に一致する正規表現を作っているのですが、さらに
・文字列の中間に全角スペースが1つ入っている。
・全体の文字数が20文字以内であること。
を条件に加えたいと思っていますがどのように記述したらいいでしょうか?

(マッチする例)
山田 太郎
ジョージ ブッシュ
(マッチしない例)
ウィリアム J クリントン ←スペースが2つ
山田太郎 ←スペース無し
 山田太郎 ←先頭にスペース
あいうえおかきくけこ さしすせそなにぬねの ←20文字超
393デフォルトの名無しさんsage2007/01/23(火) 11:18:30
(^u^n^k^o)*
394デフォルトの名無しさん2007/01/23(火) 12:40:12
>>392
正規表現でググレカス
395デフォルトの名無しさんsage2007/01/23(火) 13:33:09
/(^o^)/ って何にもヒットしないんだな。オワタ
396デフォルトの名無しさんsage2007/01/23(火) 16:08:09
正規っていう言葉は傲慢だ!
こんなセンスの無い表現を勝手に正規あつかいするな!
397デフォルトの名無しさんsage2007/01/23(火) 16:10:27
「面倒くさがりのためのセンスの無い表現」 とか、 「紙面のスペース上都合の良い表現」とかに変えろ!
398デフォルトの名無しさんsage2007/01/23(火) 17:24:02
http://dictionary.www.infoseek.co.jp/?ii=0&lp=0&sm=1&sc=1&gr=ml&qt=regular&sv=EJ&se=on
直訳だからな。
399デフォルトの名無しさんsage2007/01/27(土) 00:48:54
http://capslockabcjp.kitunebi.com/faq.html

boostのバグ?

スレでの指摘により、boostの動作が怪しいという指摘がありました。
boost1.33および1.33.1で/\1/を使用した場合に落ちることを確認しました。
400デフォルトの名無しさんsage2007/01/27(土) 01:18:31
このスレ的に、これはテンプレにいれとくべきだな

正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
401デフォルトの名無しさん2007/01/27(土) 12:50:50
秀丸で置換をしているのですが

abc=
def=
ghi=




abc=abc
def=def
ghi=ghi


とするにはどういった正規表現で置換すればいいのでしょうか?
402デフォルトの名無しさんsage2007/01/27(土) 13:01:45
>>401

(.+?)= → \1=\1

でいいんじゃね?
403デフォルトの名無しさんsage2007/01/27(土) 13:20:09
>>402
できました!
ありがとうございます
404デフォルトの名無しさん2007/01/28(日) 11:19:30
正規表現ってのを勉強したいんですが、最も一般的なのはどこの正規表現なんですか?
405デフォルトの名無しさんsage2007/01/28(日) 11:38:51
>>404
perlかsedが手ごろ。Windowsでも入手できるよ。
406デフォルトの名無しさん2007/01/28(日) 11:57:42
いや、文法は検索して勉強からするからいいんですけど、
正規表現って環境によって色々種類があるみたいで、
どれを勉強すればいいかわからない・・・。
一番スタンダートとされてるものは、grepなんですか?
407デフォルトの名無しさんsage2007/01/28(日) 12:11:58
Perl5互換のものが多いかと。
408デフォルトの名無しさんsage2007/01/28(日) 13:15:18
いいえ。
409デフォルトの名無しさんsage2007/01/28(日) 13:32:17
メジャーなのではegrepが一番セオリーに忠実だと思う。
世間じゃPerl式が主流でもう正規表現の範疇から外れまくってる。
410デフォルトの名無しさんsage2007/01/28(日) 15:08:29
とりあえずperl互換モードがなければ駄目エンジン決定だからな
411デフォルトの名無しさんsage2007/01/28(日) 16:14:22
そんなにPerl式っていいのか?
lexやegrepと動き違うし、エンジンごとの挙動もぴったり合わなくなるし
使ってて感覚的に不正確なんだが(それが正しくても人間の感覚とズレるから)。
412デフォルトの名無しさんsage2007/01/28(日) 16:42:03
俺の感覚にも合わん。>perl式
俺的に、かなりの場面で、egrep程度の能力+プログラムコードの方がわかりやすい。
もちろんそうでない場面も多少はあるだろうが、あれだけ拡張する必要はなかったろう。
413デフォルトの名無しさんsage2007/01/28(日) 20:25:42
Perl式とegrep式ってどの辺が違うの?

最短一致の?とか、(?…)系のとこだけかな?
414デフォルトの名無しさんsage2007/01/28(日) 21:16:46
egrepは常にパターン全体で最長の一致をとるけど、
perlは適当なところで中断して結果を返す仕様。

perlは深さ優先探索で枝刈りって制約をうけるから、
プログラム的な設計の自由度が全然なくてDFAとか使えない。
415デフォルトの名無しさんsage2007/01/29(月) 00:04:20
駄目とか使えないとか じゃあなくって
perl式は世のデファクトだからなぁ

正しいとか正しくないとか関係ない
416デフォルトの名無しさんsage2007/01/29(月) 00:42:55
>>414
んと、世間でよくいう「PPerl 5互換」というのはものぐさマッチ(最短マッチ)などの
表記上の拡張を受け付けるかどうかという観点でいってるんじゃないかな。

枝刈りだのなんだのまで考えて「互換仕様」にしているdeveloperはいないんじゃかろうか?
もちろん、理屈の上でperlと同じようにしないと実装できないというのは
おいといてね。

斜め読みなんで勘違いしているかもしれないけど、perl 6の rule だと
DFAで解釈できるところはDFA作ってマッチングを行うとかあったような。
まあもはやアレは「正規表現」じゃないが。
417デフォルトの名無しさん2007/01/29(月) 01:34:35
ちょんまげは性器表現
418デフォルトの名無しさんsage2007/01/29(月) 02:06:01
妹「ああもう沢山。この兄と来たら陰茎の事ばかり。
  得意げな顔をして髷を動かしている。こんな兄の血を引く自分が憎い」
妹「卑猥にすぎる。日本はどうなってしまうのか」
419デフォルトの名無しさんsage2007/01/29(月) 02:26:21
オラ難しいことはわかんねーだが
最短一致てのが使えるってーことを知ったとき
「こりゃ便利だべ!」と思ったべさ
420デフォルトの名無しさんsage2007/01/29(月) 15:21:23
専門板らしくなってきたのに。
421デフォルトの名無しさんsage2007/01/29(月) 19:31:06
>>418
兄の血を引く妹っておかしくね?
422デフォルトの名無しさん2007/01/30(火) 02:33:54
血縁は兄の子だけど、登録は兄の妹になってるだけじゃね?
423デフォルトの名無しさんsage2007/01/30(火) 02:39:51
つまりこういうことだ
http://ex20.2ch.net/test/read.cgi/gline/1162165418/758-759
424デフォルトの名無しさんsage2007/01/30(火) 02:48:03
正規表現で説明して
425デフォルトの名無しさんsage2007/02/02(金) 18:00:49
javascriptの正規表現なのですが、
 /\/ads?[./]/
 /\.ads?\//
を上手く組み合わせられませんか?
/[,/]ads?[./]/
だと \.ads?\. もマッチしてしまうので、
これを除外したいのですが……。
426デフォルトの名無しさんsage2007/02/02(金) 21:02:57
/\/ads?[./]|\.ads?\//
427デフォルトの名無しさん2007/02/07(水) 14:01:14
ttp://www.sixnine.net/regexp/regexp4.html
こちらで紹介している”例外弐 : 直前にマッチした部分を後で使う方法”
というのは普通のエディタでは使えませんか?
428デフォルトの名無しさんsage2007/02/07(水) 15:10:36
「普通のエディタ」ってメモ帳か?
429デフォルトの名無しさんsage2007/02/07(水) 15:16:35
>>428
自分が今使用しているのはサクラエディタです。
430デフォルトの名無しさんsage2007/02/07(水) 15:31:23
じゃ、そちらのスレでどうぞ
431デフォルトの名無しさん2007/02/08(木) 03:18:39
行末から一番近い位置のある文字から行末まで削除したいのですが
分かりません(行頭からというのは出来るようになりました)
kome!kame!
の最後からkを探してそこから削除して kome! だけを残したいです
よろしくお願いいたします
432kome!kame!2007/02/08(木) 06:21:48
test
433デフォルトの名無しさんsage2007/02/08(木) 07:22:24
echo 'kome!kame!' |sed -e "s/\(.*\)k[^k]*$/\1/"
434デフォルトの名無しさんsage2007/02/08(木) 11:17:16
kome!
435デフォルトの名無しさんsage2007/02/08(木) 18:45:14
{}の間の、改行のみの行、を正規表現で削除したいのですが、どうなるでしょうか?
例えば、
-----------------
{
hoge

}

{

}
-----------------------
の場合、
-----------------------
{
hoge
}

{
}
-----------------------
にしたいと考えています。

phpのpreg_replaceを利用するつもりです。
おながいします orz
436デフォルトの名無しさん2007/02/09(金) 10:04:17
MovableTypeのプラグインで、BANASCIIという、
ラテン文字のみのトラックバックを禁止するものがあるのですが、
それと同じ正規表現をPHPに使いたいと思い、
ソースを見たのですが、Perlもわからずちんぷんかんぷんです。
とりあえずそれらしきもの(^[\x00-\xff]+$)を見つけたのですが、
これをそのままPHPでやってみたところ、日本語が混じってるのにも関わらず、
マッチしてしまったようです。
PHPではどうかけばいいのでしょうか?どなたかアドバイスお願いします。
437デフォルトの名無しさん2007/02/09(金) 15:01:40
こんにちは、宜しくお願いします。

以下にあるjavaの正規表現構文に従って

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html

正規表現でメールアドレスを取って行きたいです。
以下の様な一行にあるメールアドレスを"<"や">"を判定材料として使わずに
取り出す事は可能でしょうか?XYZは任意の文字列です。

To: =?ISO-2022-JP?B?GyRCSRsoQg==?= <XXXXXXXXXX@YYY.XXX.ZZZ.jp>, =?ISO-2022-JP?B?GyRCRsoQg==?= <XXXX@YYYYYYY.ZZ.com>
438デフォルトの名無しさんsage2007/02/10(土) 14:58:29
>>436
\xffじゃなくて\x7fが正解
439デフォルトの名無しさん2007/02/10(土) 22:02:19
A,B,CDE,F
#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G
....
というようなデータがあったとして、
#で始まる行だけ「,」を「&」に置換するのは正規表現だけでできるでしょうか?
PHPのpreg_replaceを使った置換ライブラリが既にあって、
それを通す時に置換しないといけない状況なので困っています…。

↓こういう出力になって欲しいのです。
A,B,CDE,F
#A&B&C&D
HOGE,HOGE,
aiueo,kakikukeko
#E&F&G
....
440乞食(´・ω・`)ショボーン 2007/02/10(土) 23:09:20
めぐんで下さい。

ClipsedをTeraPadに追加したのですが、ClipsedのGUIの日本語が
文字化けして読めません。Clipsedのメイン画面と複数検索補助画面の
画像ファイルをどこかにアップして頂けないでしょうか?

よろしくお願いします。(ペコ

441デフォルトの名無しさんsage2007/02/11(日) 00:01:31
>>440
どこを正規表現?
442デフォルトの名無しさんsage2007/02/11(日) 04:59:55
>>439

行頭が#のときだけ置換してから呼ぶというパターンでなんか不具合があるの?


if (preg_match(行頭の#)) {
   plage_replace ほげほげ ← ,を&に置き換え
}
ライブラリ呼び出し

つーぱたーんでさ。
443デフォルトの名無しさん2007/02/11(日) 06:24:53
>>442
ありがとうございます。PHPのコードが入れられたら一発なんですよね。
でも、設定ファイルに相当するものしか変更する権限がないので、
プログラム部分が一切変更できません。なので、正規表現のみで実現できないか悩んでいます。

しかも変更できる部分が

preg_replace('/スラッシュの内側と/', '置換後', ...);

だけなので、パターンに/eとか/mを指定してすることもできず、例えば

preg_replace('/^L.*$/me', "str_replace(' ', '', '$1')" ...);

となるようにすることもできません。

ウワーン(T_T)
444デフォルトの名無しさん2007/02/11(日) 20:11:19
>>439
phpにバージョンによっては可能
445デフォルトの名無しさんsage2007/02/11(日) 20:24:58
preg_replace('/^\#.*$/me', "str_replace(',', '&', '\\0')", $data);
うちはこれで動作したみたいだけど
446デフォルトの名無しさん2007/02/11(日) 20:44:01
ありがとうございます。
>>443の通り、プログラムが書けるわけではないので
正規表現のみでできないか探しています。
447442sage2007/02/11(日) 23:59:26
>>443
そーゆー制限事項は省略せんでくれ
正規表現にこだわって問題を難しくしている人がままいるので気になるのだよw
でだ、

<?php
$str0 = "#a,b,c,d";
$str1 = "e,f,g,h";
$pat = "/(?=(?:#|(?<=.)\G))([^,]*),/";
echo preg_replace($pat, "$1&", $str0), "\n";
echo preg_replace($pat, "$1&", $str1), "\n";

結果
#a&b&c&d
e,f,g,h

こんな感じになったがこれでよいかや?
448デフォルトの名無しさんsage2007/02/12(月) 02:09:51
行単位じゃないならこれで動くかな?
ほとんど>>447のパクりだけど

$str = 'A,B,CDE,F
#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G';
echo preg_replace("/(?=(?:#|(?<=.)\G))([^,\r\n]*),/", "$1&", $str);
449デフォルトの名無しさん2007/02/12(月) 17:49:40
>>447失礼しました。
既存のライブラリを使わないといけない制限はかなりツライですね…。

>>448の方法で動きました!
内部的に行単位じゃありませんでした。
感謝の気持でいっぱいです。
ありがとうございます。
うをースゲー!
450デフォルトの名無しさん2007/02/12(月) 19:51:34
PHPの正規表現で携帯から送信されたメールのヘッダから宛先アドレス部分を取り出す場合の質問です。
preg_match("/To: <(.+?)>\s/", $header, $result);
・・・と書いています。これでvodafoneのV602SHから送信されたメールでは上手くいきました。

これはこれでメールの仕様通りだと思いますが、
もしも「To」が「to」や「TO」だったら? もしも「To:」の後ろのスペースが1つじゃなかったら??
もしも「< >」が使われていなかったら??? etc.

そう考えていくと正規表現を何パターンも用意しなくてはならず、漏れが怖いです。
こういうとき、皆さんはどう対処していますか? この場合の汎用的な正規表現ってあるのでしょうか?

なお、検索したらモード修飾子というものがあるのを知り、
preg_match("/To:\s?<?(.+?)>?\s/i", $header, $result);
にしてみたら、かえって悪くなりましたorz

今までマッチしてたはずのものにもマッチしなくなりました・・・
451デフォルトの名無しさんsage2007/02/12(月) 20:35:09
基礎くらいちゃんと勉強してきな
452デフォルトの名無しさんhage2007/02/12(月) 22:56:02
…と、回答できるほどの基礎能力が身に付いていない>>451の独り言であったww
453デフォルトの名無しさんsage2007/02/12(月) 23:22:01
*
[]
454436sage2007/02/13(火) 04:37:32
>>438
返答おそくなってすみません。
\x7fにしたところみごとできました。
本当にどうもありがとうございます。
4554502007/02/13(火) 11:22:48
おはようございます。
昨夜いろいろ試してみましたが、結局ダメでした・・・

どなたかお知恵をお貸しください・・・
456デフォルトの名無しさんsage2007/02/13(火) 11:33:32
>>455
答えようかと思ったらすでに回答ついてるじゃないか
457デフォルトの名無しさんsage2007/02/13(火) 11:56:20
>>456
分からないなら分からないと素直に認めないと。
458デフォルトの名無しさんsage2007/02/13(火) 12:20:45
簡単すぎて答える人がいないだけだと気づけ
459デフォルトの名無しさんsage2007/02/13(火) 14:34:42
>>458
「自分は玄人ぶってるけど、実は自信が無いただのバカです」と気づけ。
460デフォルトの名無しさんsage2007/02/13(火) 20:01:26
この板過去にさかのぼってIDが突然表示されたら面白そう。
461デフォルトの名無しさんsage2007/02/13(火) 20:52:22
>>450
「メールヘッダからメールアドレスを抜き出したい」
という要件を「厳密に」やろうとすると、実は極めて難しいです。
462デフォルトの名無しさんsage2007/02/13(火) 21:12:54 ?2BP(737)
<p>aaaaa</p>
…いくつかの改行
…いくつかの文字列
<div>bbbbb</div>

この様に複数行にわたる文字列<p>〜</div>の一致を返すことのできる正規表現はありますでしょうか、
またそれは可能でしょうか、どうぞよろしくお願いします。
463デフォルトの名無しさんsage2007/02/13(火) 21:14:42
あります、そして可能です。
こちらこそよろしくお願いします。
464デフォルトの名無しさんsage2007/02/13(火) 21:37:31 ?2BP(737)
ありがとうございます。>>463
では、その方法を伝授してはいただけないでしょうか。
465デフォルトの名無しさんsage2007/02/14(水) 00:50:03
>>461
「メールアドレス」を厳密にやるのは難しいけど、
とりあえずメアドのマッチは適当でいいとして、
ヘッダの中から「To:」で始まるメアド「らしき」文字列を抜き出すのは
簡単なのでは??
466デフォルトの名無しさんsage2007/02/14(水) 00:52:45
>>465
簡単だと思うなら正規表現挙げてやれよ
467デフォルトの名無しさんsage2007/02/14(水) 01:17:03
必死w
468デフォルトの名無しさんsage2007/02/14(水) 02:13:39
>>466
教えない
469デフォルトの名無しさんsage2007/02/14(水) 09:41:44
厳密にはこれか。
http://www.din.or.jp/~ohzaki/perl.htm#Mail
長すぎてわけわからん
470デフォルトの名無しさんsage2007/02/14(水) 16:53:03
>>469
いま話題になってるのは、「メアドそのもの」のマッチじゃなくて、
メールのヘッダから「To:の行」を取り出す話。
471デフォルトの名無しさんsage2007/02/16(金) 00:57:45
javascriptで
1999-12-23日のような形式をした日付けかをチェックするために
function checkDate(str){
if(! str.match(/^(\d{4})\-(\d{2})\-(\d{2})$/)) return false;
var sYear = parseInt(RegExp.$1);
var sMonth = parseInt(RegExp.$2);
var sDay = parseInt(RegExp.$3);
if(sYear<1950) return false;
if(sYear>2050) return false;
if(sMonth<1) return false;
if(sMonth>12) return false;
if(sDay<1) return false;
if(sDay>31) return false;
return true;}
function checkSubmit(obj){
var empty_flag_title = obj.title.value == "";
var empty_flag_from = obj.date_from.value == "";
var empty_flag_to = obj.date_to.value == "";
if(empty_flag_title && empty_flag_from && empty_flag_to){return false;}
if(!empty_flag_from){
var str = obj.date_from.value;
if(!checkDate(str)){return false;}}
if(!empty_flag_to){
var str = obj.date_to.value;
if(!checkDate(str)){return false;}}
return true;}
とこんな感じでチェックしているのですが
2007-01-01は通るのに2007-01-08もしくは09は通りません.
自分にはまったく通らない原因がわかりませんでしたので,どなたか何処が間違っているか教えてください.
よろしくお願いします.
472デフォルトの名無しさんsage2007/02/16(金) 01:14:51
parseInt("08") == 0
parseInt("08", 8) == 0
parseInt("08", 10) == 8
473471sage2007/02/16(金) 12:49:48
>>472
返信ありがとうございます.
無事解決できました.
474デフォルトの名無しさん2007/02/16(金) 22:33:22
アクセスログの解析で、****.gifは削除してカウントしたいのですが、
正規表現でどのように現すか分かりません。。

.*(?!gif)

でわ、****.gifもマッチしてしまいました。。 どのようにすればよいかお教えくださいです!
475デフォルトの名無しさんsage2007/02/16(金) 23:13:24
>>474
****.gifにマッチしたら除外する方がよくないか?
476デフォルトの名無しさんsage2007/02/17(土) 11:30:51
PHPで正規表現
http://www.pahoo.org/e-soul/webtech/php05/
477デフォルトの名無しさんsage2007/02/22(木) 11:29:01
とりあえず正規表現ドシロウトなので天麩羅のページ行って
こんなの作ったけどうまくうごかねぇ・・・

動作目標は 

先頭から+-が1つまたは無し
0から9の文字が1以上10以下連続し
その後でピリオドがあってもなくてもよい
ピリオドがない場合そっから後ろの文字が何にもなければOK
ピリオドがあった場合0から9の文字が1つ以上3以下連続してある事

^[-+]?[0-9]\{1,10\}[.][0-9]\{1,3\}

これで動くかなと思ったけど今一歩・・
実際どこが悪いかといわれるとピリオド判定が悪い気がするんだが・・・
もし気づいた人いたら指摘くださいませんか?
478デフォルトの名無しさんsage2007/02/22(木) 11:55:58
それだとdotが必須になってるね。
dotを含めた小数点以下があるかないかだから、
(\.[0-9]\*{1,3\})?
かな。
479デフォルトの名無しさん2007/02/22(木) 12:07:51
>>478
トンクス!
あ〜グループにしてそれがあるか無いかの判断と考えればいいのか

やってみます!ありがとでした
480デフォルトの名無しさんsage2007/02/23(金) 15:26:35
正規表現おもすれー( ^ω^)
481デフォルトの名無しさん2007/02/26(月) 00:45:14
htmlファイルの編集をPHPでやりたいと思っています
テーブルタグが2重(3重)になっているものがありまして

<table>
 <table>なにかKeyになる文字</table>
</table>

の時に内側のテーブルのみを消去したく
$html = preg_replace('/<table>.*?Key.*?<\/table>/is', '', $html);
としてみたのですが、外側の開始タグ以降から消去してしまいます

正規表現自体知ったばかりなので初歩的な質問かも知れませんが
ご教授いただけるとうれしいです
482デフォルトの名無しさんsage2007/02/26(月) 01:46:25
×ご教授
○ご教示
483デフォルトの名無しさんsage2007/02/26(月) 01:52:47
>>481
そりゃ正規表現で処理すべき問題じゃない。
知ったばかりだというならなおのことその辺に注意すべき。

ネストを二重に限定していいなら手でネストを書いとけば?

あとPHPのpreg_だと再帰的な構造も書けた気がするけど
書き下すの面倒なので俺はパス。

484デフォルトの名無しさんsage2007/02/27(火) 03:48:27
>>481
Perlしか知らないけど
/<table(?!<table)(.(?!<table))*?<\/table>/
これで行けない?
485デフォルトの名無しさんsage2007/02/27(火) 03:49:17
ごめん
/<table(.(?!<table))*?<\/table>/
486デフォルトの名無しさんsage2007/02/27(火) 03:51:45
/is ね
487デフォルトの名無しさんsage2007/02/27(火) 06:10:09
質問です。
例えばカンマで分解したいのですが、括弧やクォーテーションで括られたカンマは
対象外にしたいのです。

例1)aaa,bbb,ccc
aaa
bbb
ccc

例2)aaa(a1, a2),bbb(aaa(a1, a2)),ccc("9,999")
aaa(a1, a2)
bbb(aaa(a1, a2))
ccc("9,999")

お助けください。
488デフォルトの名無しさんsage2007/02/27(火) 11:10:02
>>484
Key の処理が抜けてるような。
489デフォルトの名無しさん2007/02/27(火) 19:16:29
PHPで以下のようにしてvalueの中身を取得したいと思っているのですが、マッチしません。

$line=preg_match('/<input type="hidden" name="MT" value="(.*?)">/i',$line,$reg);

やはり、間違ってますかね?
490デフォルトの名無しさんsage2007/02/27(火) 19:18:29
$reg[1]に入ってるはず
491デフォルトの名無しさん2007/02/27(火) 19:23:26
>>490

レスありがとうございます。入ってないんですよね。

具体的には
<input type="hidden" name="MAP" value="E139.44.55.110N35.39.19.420">
<input type="hidden" name="MT" value="東京都港区芝公園4-2-8">

という感じが、$lineに入っていくのですが。
492デフォルトの名無しさんsage2007/02/27(火) 19:30:33
preg_matchの戻り値を$lineに代入してるのは何?
4934892007/02/27(火) 19:34:30
単純にマッチしたかどうかをチェックするためです。紛らわし書き方すみません。

print_r($reg);

とやっても何も入っていないのです orz
494デフォルトの名無しさんsage2007/02/27(火) 21:02:48
すいません、教えてください、、VBAで、テキスト中から、

$$自由な文字 {{自由な文字}}
例)$$foo {{boo boo boo}}

を抜き出して、自前でセレクタと要素を表現、みたいなことをやろうと色々やってみています。
現在は下のような感じなのですが、

myRegExp.Pattern = "\$\$([^{{]*)\{\{([^}}]*)\}\}"

例2)$$foo {{ boo boo } boo }}
{{で開け、}}で閉じているつもりなのに、例2のように}を単発入れると
無視してしまいます。
どこが悪いのでしょう、、どなたか教えてください・・
495デフォルトの名無しさんsage2007/02/27(火) 22:15:40
[^{{]

[^{]
と同じだぞ?
496494sage2007/02/27(火) 22:23:31
>495
ありがとうございます。今試して知りました・・。
長々と相談をしてしまいましたが、質問を絞れました。ご指摘いただいたように
「{{」以外の任意の文字、を表現したい、というのが相談の肝です。
([^{{2}]←これでいくように思えたのですが、駄目ですね・・。)
ご教授いただければ幸いです。。
497デフォルトの名無しさんsage2007/02/27(火) 22:32:22
>>482
498494sage2007/02/27(火) 22:44:35
>497
失礼しました。
499デフォルトの名無しさんsage2007/02/28(水) 07:17:29
一文字で表すと責任だそうですが/./にマッチしません。
自民党に訊いた方がいいですか?
500デフォルトの名無しさん2007/02/28(水) 14:36:35
<a href="/rap.php?q=hogehoge&p=2">hogehoge</a>

このリンクタグからhogehogeを抜き出すには、どのように書けばいいのでしょうか?
PHPなのですが、以下のように書いて取得できません。

preg_match("/(\bhref\s*=\s*[\"']?)(\/rap.php[^\s\"'>]*)">(.*)<\/a>/i",$line,$reg);
最後のキャプチャ部分が取得できないのですが。。。
501デフォルトの名無しさんsage2007/02/28(水) 16:33:32
>>500
([^<]+)
502デフォルトの名無しさんsage2007/02/28(水) 21:13:40
その正規表現はどこかからか持ってきたものを改造したものなのか?
それではマッチしないだろ…常識的に考えて…。
[^\s\"'>]* ←これは感心した。

/\bhref\s*=\s*([\"']?)\/rap.php?([^\s\"'\/>]*.*?)\1\s*>(.*?)<\/a>/
こんな感じでどうだ?
503デフォルトの名無しさんsage2007/02/28(水) 21:14:58
ミスった。
rap.php? → rap\.php
504デフォルトの名無しさん2007/03/02(金) 00:13:42
質問です。

http://www.din.or.jp/~ohzaki/regex.htm
> ある文字列を含まないものにマッチする正規表現
> (?:(?!foo).)*
とあるのですが、これは正しいのでしょうか?

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html を見ると、
(?:(?<!foo).)*
のような気がするのですが、いかがでしょうか?

どうぞよろしくお願いいたします。
505デフォルトの名無しさんsage2007/03/02(金) 00:27:59
>>504
正しい

(?!foo)は現在の注目地点から見て、その後にfooが続いていない、という条件
(?!foo).で、それ自身がfooという文字列の1文字目にならない1文字にマッチ。
(?:(?!foo).)*でその繰り返し。

(?:(?<!foo).)*
だとある1文字の前にfooという文字列が来ない、という繰り返し。
最後にfooがあったらマッチしてしまう。
(?:.(?<!foo))*
これなら得られる結果は違うが条件を満たす。
506デフォルトの名無しさんsage2007/03/02(金) 09:52:18
C#で正規表現を使用しています。
C++ファイル(.cpp)のメソッドの実装部分だけをくり抜こうとしています。

void Test::Test(void)
{
// メソッド実装
}

上記の { から } までを抽出しようとしているのですが
"^\{.*?^\}"ではマッチしません。

どうすれば { から } を抽出できるでしょうか?
507デフォルトの名無しさんsage2007/03/02(金) 10:39:16
こりゃまたあんたえらい無茶言いよんな。
508デフォルトの名無しさんsage2007/03/02(金) 10:49:36
自己解決しました。

"^\{[\n\s\w\\\*\+\.\?\{\}\(\)\[\]\^\$\-\|\&\""=:;\/,!#\<\>\+%']*?^\}"
でヒットしました。

もっと短くなればいいのですが。

あと、半角カタカナのコメントがあるとだめですが。
509デフォルトの名無しさんsage2007/03/02(金) 13:25:53
必ず行頭に { とか } があるって条件なら

Regex r=new Regex(@"(?<=\n)\{(.*?)(?<=\n)\}",RegexOptions.Singleline);

でいいんじゃないですか?
510デフォルトの名無しさん2007/03/03(土) 00:59:09
perl質問板で質問したらこっちの方が適切だと教えられたので誘導されてきました。

「$textにいくつかの文字列候補、例えばApp,Bbq,Ntk,Sunが2個以上(非重複)含まれる時」
っていう条件はどう書けばいいのでしょうか?
1つだと $text =~ /(App|Bbq|Ntk|Sun)/だけど・・・
511デフォルトの名無しさんsage2007/03/03(土) 01:33:42
Perl なら
/(App|Bbq|Ntk|Sun).*\1/
でいけた気がする。
512デフォルトの名無しさんsage2007/03/03(土) 01:42:34
それって重複じゃね。
513デフォルトの名無しさんsage2007/03/03(土) 03:27:26
>>508
とりあえず、その過剰で余計なエスケープをやめれば短くなるでそw
514デフォルトの名無しさんsage2007/03/03(土) 04:23:30
>>511
なんか条件の文があいまいだな。
そのあげられた単語の中から二種類以上見つかったら当たりってこと?

Perlスレの811にあるようにリストコンテキストで受けて、その中身を
チェックした方がいいと思うよ。正規表現だけでやってやれなくはないと思うけど
多分効率が悪い。対象の単語の数が増えるならなおさら。
515デフォルトの名無しさん2007/03/03(土) 06:15:55
>>514
> そのあげられた単語の中から二種類以上見つかったら当たりってこと?
そうです。例えばマッチする$textの例としてはMonSunFayAppなどです。マッチングしない例としてはAppMonAppKeyなど。

>リストコンテキストで受けて
う・・とりあえずレス811を見たんですが
(scalar @{[$text =~ /App|Bbq|Ntk|Sun/g]} >= 2)
これでいけるんでしょうか??
516デフォルトの名無しさんsage2007/03/03(土) 06:53:13
もう試していると思うけど、それでは無理。
正規表現にこだわらないなら(スレ違いだけど):
(grep { $text =~/$_/ } qw(AA BB CC)) >= 2
517デフォルトの名無しさんsage2007/03/03(土) 08:09:02
perlスレに引っ込んでろよ。
518デフォルトの名無しさんsage2007/03/03(土) 16:39:58
>>482
ご教授でも間違いではないよ
519デフォルトの名無しさんsage2007/03/03(土) 17:08:08
いいえ。
520デフォルトの名無しさんsage2007/03/03(土) 17:08:11
間違い
521デフォルトの名無しさんsage2007/03/03(土) 17:32:05
ではありません
522デフォルトの名無しさんsage2007/03/03(土) 17:39:53
判断下す前に辞書くらい引いたらどうなんだ。
523デフォルトの名無しさんsage2007/03/03(土) 21:04:50
>>510
お前さん移動するなら元のスレに一言くらい書いといてくれよ。
524デフォルトの名無しさんsage2007/03/04(日) 16:15:45
"abc<def>ghi<jkl>mno"

こういう文字列があった場合、
"<"から">"までを検索したいんですが、
一回目は<def>
二回目は<jkl>
に、ヒットさせたいと思ってます。

"<.*>"で、検索すると、
"<def>ghi<jkl>"という具合にマッチしてしまうんですが、
何かいい方法はないでしょうか?
525デフォルトの名無しさんsage2007/03/04(日) 16:33:56
"<[^>]*>"とか。
526524sage2007/03/04(日) 17:09:31
>>525
いけましたっ!
ありがとうございます。
527デフォルトの名無しさんsage2007/03/06(火) 04:17:08
IgnoreCase の場合で、一致したパターンそのものを得たいのですがどうすればよいのでしょうか。

例えば、hogeboo を (HoGe|Fuga) ってパターンで一致させる場合、$1 は hoge になります。
得たいのは HoGe です。
528504sage2007/03/06(火) 06:17:12
>>505

せっかくすぐにレスをいただいたのにお礼が遅くなりまして、すみません。
なるほど。「現在の注目地点」という考え方をするのですね。
なんとなく、前とか後とかとしかとらえられていなかったので、勉強になりました。
よくわかりました。どうもありがとうございました。
529デフォルトの名無しさんsage2007/03/06(火) 13:49:17
>>527
一度HoGeに置き換えてもう一度マッチさせるとか
530デフォルトの名無しさんsage2007/03/06(火) 13:54:24
>>527
ワイルドカードや量指定子などがついていないなら
正規表現の文字列表現をマッチさせて取り出した部分文字列で逆に検索すればいいんじゃね?

(?i:HoGe|Fuga) -> hogeboo -> hoge
?i:hoge -> (HoGe|Fuga) -> HoGe
531デフォルトの名無しさんsage2007/03/06(火) 15:23:05
この機能が正規表現の処理系に組み込みであればデバッグとかに凄く便利そうだけど、
一般には理論的に不可能なのかな?
532デフォルトの名無しさんsage2007/03/06(火) 17:35:55
可能だけどニーズが無いだけ
533デフォルトの名無しさんsage2007/03/07(水) 00:27:11
実質的に|でどっちに分岐したのかを判定するのにしか使えなくね?
534デフォルトの名無しさんsage2007/03/07(水) 03:02:31
まさしく switch 文などでの分岐で利用したいのです。
コードの可読性を考えて、IgnoreCase の case でひっかけたい。
現在は小文字化や大文字化した後の文字列でひっかけてます。
その場合、case 条件の値が小文字化や大文字化済の文字列になって、
いまいち見た目美しくない。
たいした問題ではないのですが、気分的にいやなので。
case の一致条件が IgnoreCaes にできる処理系だといいんですが。

>>530
Hoge や Fuga など取り出す部分を対象文字列分用意して置き換えてしまえば
可能なのはわかりますが。
$1 風にエレガントにできないのかな〜と?
535デフォルトの名無しさんsage2007/03/07(水) 14:02:46
できるかできないか、できたとしてどのように実現するかは処理系に依存するわけだが、
その処理系を明らかにしてくれないことには答えようがないと思うんだ。

ここまでのお前さんのレスだけだと、処理系を作ろうとしているのか、
既存の処理系を使っているのかすらわからない。
536デフォルトの名無しさんsage2007/03/07(水) 14:22:20
もうさあ、処理系に何を使ってるか示さない香具師に回答するのやめようや。
537デフォルトの名無しさんsage2007/03/11(日) 20:42:15
質問です。
www.hoge.jp/huga/index.html
のような文字列を www.hoge.jp と /huga/index.html とに分割したいんですが
(要は1個めの"/"の前と"/"以後で分けたい)、この場合それぞれにマッチする
正規表現はどうなるでしょうか?
538デフォルトの名無しさんsage2007/03/11(日) 20:55:41
前者:
[^/]*
後者:
.*
539 ◆TWARamEjuA sage2007/03/11(日) 21:03:30 ?2BP(6811)
($domain, $filename) = $url =~ m|(.+?)/(.+)|;
perl的。
540デフォルトの名無しさんsage2007/03/11(日) 21:21:00
($domain, $filename) = split '/', $url, 1
541デフォルトの名無しさんsage2007/03/14(水) 01:11:05
いちばん萌える正規表現って何ですか?
542デフォルトの名無しさんsage2007/03/14(水) 11:05:09
>>541

/ですぅ/i
543デフォルトの名無しさんsage2007/03/15(木) 13:32:22
どうせ
[ぁ-ん]とか期待してるんだろ!!そうだろ!!
544デフォルトの名無しさんsage2007/03/15(木) 14:38:29
>>541
メールのヘッダのアドレスを解析するやつ
545デフォルトの名無しさんsage2007/03/16(金) 08:17:30
>>541
^..^
546デフォルトの名無しさんsage2007/03/16(金) 22:51:06
リンクされていないURLにのみリンクするってことを、Pythonでもできませんか?
次のような感じでPerlでは想定した結果が出るんですが、
Pythonだと (?>pattern) が使えない関係でどうにもうまくいきません。( ++, *+, ?+ とかも使えません )

# yahooにのみリンクするサンプル
$html = q{
<p><a href="http://www.google.co.jp/">http://www.google.co.jp/</a></p>
<p>http://www.yahoo.co.jp/</p>
};

$html =~ s`(?<!\ssrc=")(?<!\shref=")(?>(?<![a-z09/])(h?ttp://[-_a-z0-9.~:/?#%@!$&'()*+,;=]+))(?!</a>)`$1 <a href="$1">[open]</a>`gi;
547546sage2007/03/17(土) 01:59:09
とりあえず re.sub(pattern, repl, string) の repl に関数を指定する方法で解決しました。
一行でできればなおベストですが・・・
お邪魔しました。
548デフォルトの名無しさん2007/03/18(日) 03:28:43
Javascriptの正規表現って、perl互換だっけ?
549デフォルトの名無しさんsage2007/03/18(日) 11:31:48
>>548
互換てどこまでの意味でいってる?
たいがいの表記なら使える程度なら互換性はある。
Perlしかないものがあるのと、
バグまで含めた動作でいえば互換性は
ないかもしれない。
550デフォルトの名無しさんsage2007/03/19(月) 10:36:19
>>548 のレベルで使いこなせる範囲では互換性はある。
551デフォルトの名無しさんsage2007/03/19(月) 11:56:15
事実だけど、そういう意地悪なこと言う奴は死ねばいいのに。
552デフォルトの名無しさんsage2007/03/19(月) 15:57:53
まあそのうち死ぬから
553デフォルトの名無しさんsage2007/03/19(月) 16:42:33
その程度でいちいち腹を立ててたら早死にするよ
554デフォルトの名無しさんsage2007/03/21(水) 09:32:13
正規表現を状態遷移図に変換するツールalamo。
現在WIN32バイナリのみリリース、
まだシフトJISのみ入力可能。

使用方法:
標準入力から正規表現を入れると標準出力にdot言語のソースが出力される。
A>alamo < textfile | dot -Tjpg > out.jpg
トンプソンの構成法でなくεを消去した状態のNFA。
出力をファイルに落としてからUTF8に変換すれば漢字も出た。

http://capslockabcjp.kitunebi.com/alamo-a.zip

※動作条件としてhttp://www.graphviz.org/が必要
555デフォルトの名無しさん2007/03/27(火) 11:20:01
htmlから<input>のname要素のみを取得したいのですがどのような正規表現になりますか?
<input type="text" name="test1" value="aaaa" size="20">
→<input type="text" name="" value="aaaa" size="20">
<input>を見つける事ならできるのですがname="test1"部分のみを取得する方法がわかりません。
お力を貸してください。
556555sage2007/03/27(火) 12:50:24
自己レスになりますが
<[^\/A-Za-z]*input[^>]*(text|checkbox|radio|hidden)[^>]*(name[ ]*=[ ]*[\"\'][0-9A-Za-z][^\"\']*[\"\'])[^>]*>
でサブパターンにマッチした文字列を置き換えるようにしました。
間違えてたらご指摘いただければと思います。
557デフォルトの名無しさん2007/03/27(火) 19:32:45
 7:25PM  up 167 days,  2:03, 2 users, load averages: 1.74, 1.67, 1.30
シェルのuptimeコマンドの結果から:
 7:25PM  up (167) days,  2:03, 2 users, load averages: (1.74), (1.67), (1.30)

丸括弧( )で括った部分をマッチさせるために、次のように表現してみました。
/  up (.+) days?, .+ load average: (.+), (.+), (.+)/

もっとスマートな表現方法があればアドバイスをお願いします。
558デフォルトの名無しさんsage2007/03/27(火) 19:46:03
/proc/uptime と /proc/loadavg 見る方が良さそうだけど・・・ってLinuxじゃないとだめか。

とりあえず非欲張りな量指定子が使えるならそれ使った方がいいし、
. にしないで [0-9.] とかにしたほうがよさそう。
559デフォルトの名無しさんsage2007/03/27(火) 19:51:22
[0-9.]みたいにしたら欲張りな方が速いか。
後、uptimeって1day未満の場合の書式はどうなってんのか知らんがだいじょうぶなの?
560デフォルトの名無しさんsage2007/03/27(火) 20:01:19
uptimeの見本。
RedHat:
19:54:00 up 2:59, 4 users, load average: 1.00, 1.02, 1.02
FedoraCore:
19:55:03 up 50 days, 13:17, 3 users, load average: 0.00, 0.00, 0.00
Solaris:
7:58pm up 1 day(s), 1:01, 2 users, load average: 0.03, 0.01, 0.02
午後 8時01分 稼働 1 日間, 1:04, 3 ユーザー, 平均負荷率: 0.00, 0.00, 0.01
5615572007/03/28(水) 00:16:02
いろいろ悩んだ結果、Load Average の部分をマッチさせることにしました:
/load average: ([0-9.]+), ([0-9.]+), ([0-9.]+)/

みなさん、ありがとうございました。
562デフォルトの名無しさんsage2007/03/28(水) 09:39:51
教えて君です。急にperlのメンテをする羽目になったのですが、perlも正規表現が読めなくて困っています。
sjisにて、
$tmp =~ s/?:\x0D\x0A|[\x0D\x0A])?$/,/;
というのは、
$tmpの(「CRの次にLFが続くもの」もしくは「CRまたはLF」)が0もしくは1個続いた後で行末に続くという箇所をカンマで置き換えるという解釈でよろしいでしょうか?
563デフォルトの名無しさんsage2007/03/28(水) 12:42:42
>>562
左括弧が抜けているが、多分その通りだね。
元のソース作った香具師は、かなりの糞だな。
普通は次のように書く。

$tmp .= "," if chomp $tmp;
564デフォルトの名無しさんsage2007/03/28(水) 13:03:23
>>563
ありがとうございました。
某所でこのコードの続きについて質問したのですが、有名処のソースのコピペだったようです。
解釈についてもそこに書かれてたので、一応リンクを貼っておきますね。
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values

しかし、perl読みづらい…。
565デフォルトの名無しさんsage2007/03/28(水) 13:34:10
「かなりの糞」などと言われなくてはいけないほどのコードでもないと思うのだが。
566デフォルトの名無しさんsage2007/03/28(水) 13:37:55
それに意味変わってるしな
567デフォルトの名無しさんsage2007/04/10(火) 19:35:25
ちょっとお聞きしたいことがあります。
複数の文字列に一致させたい場合、たとえば「ヨーグルト」「プルーン」を含むテキストに一致させたい場合は、
次のようにすればいいのでしょうか。

.*ヨーグルト.*プルーン
で検索。次に
.*プルーン.*ヨーグルト

自分で言うのも情けないですが、ずぶの素人なので相当あほなやり方でやってる気がします。
568デフォルトの名無しさんsage2007/04/10(火) 19:58:14
|
569デフォルトの名無しさんsage2007/04/10(火) 20:42:37
>>568
orではなく、両方を含む文字列に一致させたいのですが。
570デフォルトの名無しさんsage2007/04/10(火) 21:23:13
ヨーグルト.*プルーン|プルーン.*ヨーグルト
571デフォルトの名無しさんsage2007/04/10(火) 21:48:02
grepで「hogeで始まる行以外」を抽出したいんですがどうすればよいんでしょうか?
一文字なら
grep "^[^h]" target > destination
みたいな感じですが。
572デフォルトの名無しさんsage2007/04/10(火) 22:32:11
grep -v
573571sage2007/04/10(火) 22:42:39
>>572
おお、どうもです
574デフォルトの名無しさんsage2007/04/13(金) 00:00:33
URLのようなそれほど長くない文字列のリストを一気に検索したいのですが、
マッチしたかどうかだけが知りたくてマッチした文字列そのものはどうでも良い場合、
最短マッチと最長マッチではどちらの方が高速に動作するのでしょうか?
ご存じの方が居られましたらご教示頂けますと幸いです。よろしくお願いします。
575デフォルトの名無しさんsage2007/04/13(金) 00:13:02
コストではもちろん最短だけどプログラムの作りによるから。
576デフォルトの名無しさんsage2007/04/13(金) 00:26:10
ということは、単純にひとつの文字列を検索する場合は最短マッチの方が速いが
プログラムの設計によっては最終的な処理を終えた時点で逆転している可能性もあるという事ですね。
参考になりました。どうもありがとうございました。
577デフォルトの名無しさんsage2007/04/13(金) 23:33:37
何を参考にしてんだか...

こういう奴が、単純にひとつの文字列を最短マッチで検索するのに
すげー遅いプログラムとか書いたりするんだろうな。
578デフォルトの名無しさんsage2007/04/13(金) 23:49:30
>>577
自分がそういうプログラムを書かないという保証はありませんが、
今回の話に限れば他人が書いたプログラムで使われている正規表現の
最短/最長マッチの使い方が妥当だったのかどうかを知りたかっただけですので
ご心配なく。
579デフォルトの名無しさんsage2007/04/13(金) 23:51:59
パール最強伝説ってのがあると聞きました 本当ですか
580デフォルトの名無しさんsage2007/04/14(土) 00:32:37
>>578
まあ、「心配するな」って言ってるんだからいいか...。
581デフォルトの名無しさんsage2007/04/14(土) 10:56:20
お前の方が心配だよ俺は。
582デフォルトの名無しさん2007/04/21(土) 03:00:42
vimで ^abc\~\?\w\+$ という正規表現について考えているのですが理解できません。
\~は「最後に置換された文字列」と解説されてたのですがこの場合置換自体していません。
583デフォルトの名無しさんsage2007/04/21(土) 04:32:48
>>582
magic オプションの設定によって意味が違うみたいだけどその辺は?
それでも \? がわからんな。
584デフォルトの名無しさんsage2007/04/22(日) 02:18:41
安易なパスワードを禁止したくて、正規表現を色々と試行錯誤しているのですが、うまくいきません。
同じ文字が3文字以上続くようなパスワードを禁止したいのですが、このような正規表現は可能でしょうか?
585デフォルトの名無しさんsage2007/04/22(日) 02:47:13
>>584
regexエンジンによってはできない。

正規表現に名前をつけて、あとから使い回せる構文があるならできる。
586デフォルトの名無しさんsage2007/04/22(日) 03:11:37
>>585
そんなに難しいケースなんですか。
ちなみにPerlを使っています。Perlって正規表現に強いと聞いていましたけど・・・。
587デフォルトの名無しさんsage2007/04/22(日) 04:20:53
>>586
本来の意味の「正規表現」からは思いっきり逸脱しているのよ > perl
んで、perlならこんな感じで検出できる。


while (<DATA>) {
    print if /(.)\1{2}/;
}

__END__
fooxxxbar
xyxxydd
foobarbaz
588デフォルトの名無しさんsage2007/04/22(日) 08:40:40
> 本来の意味の「正規表現」からは思いっきり逸脱しているのよ

なんだまた前日知ったばかりの知識で薀蓄かよ
頭悪そう
589デフォルトの名無しさん2007/04/22(日) 08:42:59
> 本来の意味の「正規表現」からは思いっきり逸脱しているのよ

なんだまた前日知ったばかりの知識で薀蓄かよ
頭悪そう
590デフォルトの名無しさんsage2007/04/22(日) 12:51:13
本来の意味の「正規表現」って何?
591デフォルトの名無しさんsage2007/04/22(日) 16:37:57
ドラゴンブックとか中田育男の本で正規表現の定義してる。

φ={1、3、5、7、9}とか例題出してるけど、
それって状態遷移図の上にある点の集まり。

パターン中のバックリファレンスは図面書けないから定義と違う。
なんつーんだろ、動作中に図面が完成するというもの。
592デフォルトの名無しさんsage2007/04/22(日) 17:01:55
形式言語理論での正則表現か。

今更そんなものを持ち出すのも阿呆らしいけどな
593・∀・)っ-○◎●sage2007/04/22(日) 18:06:43
有限オートマトン記述構文
594デフォルトの名無しさんsage2007/04/22(日) 18:17:09
お前の自作自演はサッパリ意味不明だ
ここはお前の日記帳じゃないゾ
595・∀・)っ-○◎●sage2007/04/22(日) 19:25:11
だんごやさんだよ
596デフォルトの名無しさんsage2007/04/22(日) 20:12:41
団子ちゃんなら日記帳にしてもいいんですっ><
597デフォルトの名無しさん2007/04/23(月) 02:04:47
団子チューさんが来たからにはこのスレも安泰だYO
598デフォルトの名無しさんsage2007/04/23(月) 02:07:14
ググってみたらエロ同人誌の団子屋さん?が出てきたが

ttp://www5b.biglobe.ne.jp/~yew/index.html
599デフォルトの名無しさん2007/04/23(月) 03:44:34
PHPで連続しないある1文字ならsplitというのをしたいのですが、うまくいきません。
abc@@aa@a@b123@@@@という文で@で区切りたい場合、
abc@@aa
a
b123@@@@
のように区切りたいのですが・・・
splist("@{1}",$str);では当然ながらだめでした。
6005992007/04/23(月) 07:15:58
split("[^@]@[^@]",$str); だと
abc@@a
@b123@@@@
と周辺の文字も一緒に削ってしまうのでだめでした。
ああ、正規表現難しい・・・
601デフォルトの名無しさんsage2007/04/23(月) 07:25:52
$arr = array();
foreach(preg_split('/(@+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE) as $t) {
if($t == '@') arr[] = ''; else arr[count(arr) - 1] += $t;
}
602デフォルトの名無しさんsage2007/04/23(月) 07:57:16
肯定先読みと肯定後読みを使うんだ
6035992007/04/23(月) 08:35:53
>>601
すいません、私の頭では理解できませんでした・・・コピペして使ってみたら
PHP Parse error: syntax error, unexpected '[' in [URL] ってでました

>>602
まさにやりたいことがそれみたいで、
$bufsplit = mb_split("(?<!@)@(?!@)", $buffer); と早速試してみたところ
PHP Warning: mb_split() [function.mb-split]: mbregex compile err: undefined (?...) sequence in [URL]
とでてしまいました。
PHP4だと使えないんですかね・・・orz
604デフォルトの名無しさんsage2007/04/23(月) 09:26:21
>>603
$str = 'abc@@aa@a@b123@@@@';
var_dump(preg_split('/(?<!@)@(?!@)/', $str));
605デフォルトの名無しさんsage2007/04/24(火) 01:44:29
>>603
PHP4 の mb_regex は鬼車になっていない。
ので戻り読みは使えない。
606デフォルトの名無しさんsage2007/04/25(水) 17:01:17
与えられた有限オートマトンと等価な正規表現を求めるライブラリとか
どっかにないすか?

逆は簡単なんだけどなw
607デフォルトの名無しさんsage2007/04/26(木) 08:05:24
http://pc11.2ch.net/test/read.cgi/unix/1039165754/
608デフォルトの名無しさんsage2007/05/02(水) 00:14:14
-------------------------
うんたらこうたら・・・
HOGE_START
00 1 2 3 4 5
11 6 7 8 9 10
22 11 12 13 14 15
HOGE_END
うんたらこうたら・・・
-------------------------

上のHOGE_STARTとHOGE_ENDの間の
データの00と1,11と6,22と11の部分の値を取得したい場合、
どのように記述すればよいでしょうか?
ちなみにこのHOGE_STARTとHOGE_ENDの間の行数は変動します。

補足です。
ウェブプログラマー初めて2年近くたつんですが、
正規表現が糞レベルから一向に上達しません。
なんとか苦労して使えば誤動作の嵐です。orz
習うより慣れろなんでしょうか?
609608sage2007/05/02(水) 00:25:01
素朴な疑問なのですが、
特定のデータファイルから
規則性のある部分の一部データを抜き出したい場合、
正規表現を使うものなんでしょうか?

まさに608のようなケースなんですが、
このパターンの正規表現の苦手っぷりがひどいです。
610デフォルトの名無しさんsage2007/05/02(水) 00:42:17
>>608
PCREな。
/(?<=HOGE_START\x0A|HOGE_START\x0D|HOGE_START\x0D\x0A)(.*?)(?=HOGE_END(?:\x0A|\x0D|\x0D\x0A))/s
にマッチする全体

PerlとかPHP使うならもっと単純な正規表現で十分だが。
611デフォルトの名無しさんsage2007/05/02(水) 02:34:21
>>608
正規表現、つかawkあたりの出番じゃね?

awk '/HOGE_START/,HOGE_END/ {
最初と最後の行が入っちゃうけどお好みでデータを処理
}'

CGIとかでという話なら、Perlもおんなじことできるよ。
612デフォルトの名無しさんsage2007/05/02(水) 03:20:52
>>609
まず行に分解して
固定長ならunpack関数、可変長ならセパレータの正規表現作って配列に分解して
何番目か数えればいいんじゃない?
613デフォルトの名無しさんsage2007/05/04(金) 17:28:35
JavaScriptで
AAAA|BBBB|CCCC
という文字列を分解して
AAAA
BBBB
CCCC
という配列を正規表現で返したいのですが上手くいきません、
使った正規表現「(.*)[|]?(.*)[|]?(.*)」
いい方法ありませんか?
614デフォルトの名無しさんsage2007/05/04(金) 18:06:59
split()じゃいかんの?正規表現を使わないですむし
615・∀・)っ-○◎●sage2007/05/04(金) 19:53:38
最短マッチデフォだと全く捕獲しなくていいな
616デフォルトの名無しさんsage2007/05/04(金) 22:25:31
「(.*)[|](.*)[|](.*)」で
AAAA|BBBB|CCCC
の場合
AAAA
BBBB
CCCC
を取得できたのですが
AAAA|BBBBになった場合
nullになってしまいます。・゚・(ノ∀`)・゚・。
「(.*)[|]?(.*)[|]?(.*)」
でも同じです。

>>614
正規表現を使用してやりたかったので・・・


617デフォルトの名無しさんsage2007/05/04(金) 22:41:36
要素がnullの時に空にするだけじゃないか。
618・∀・)っ-○◎●sage2007/05/04(金) 22:56:06
> (.*)[|]?(.*)[|]?(.*)

最短マッチだと文字列に全くマッチしないって理屈わかる?
619・∀・)っ-○◎●sage2007/05/04(金) 23:03:13
(.+)(\|(.+)(\|(.+)・・・・))))

で奇数番目を取る。



でも素直にsplit使えよ
620デフォルトの名無しさんsage2007/05/04(金) 23:13:21
/[^|]+/g

でも素直にsplit使えよ
621デフォルトの名無しさんsage2007/05/04(金) 23:33:18
先読みを使って、Matches に入った AAAA、BBBB、CCCC を処理する
.*(?=\||$)

でも素直にsplit使えよ
622デフォルトの名無しさんsage2007/05/05(土) 00:22:20
ありがとうございます。勉強になりました。

素直にsplit使うことにします。
623デフォルトの名無しさん2007/05/07(月) 01:24:53
foo@localhost, "foo,bar,baz" <foobarbaz@lodalhost>, foobar@localhost

PHPなんですが、このようなリストがある場合にカンマ区切りで
値を取得するにはどうやれば良いのでしょうか。
但しダブルクォートの中の文字は分割したくないです。
624デフォルトの名無しさんsage2007/05/07(月) 02:48:30
>>623
csvのデータだとみなして分割してやればいいんじゃね?
csvのハンドリングのサンプルは転がってるでしょ。
625デフォルトの名無しさんsage2007/05/07(月) 20:02:16
>>623
それはリストが悪い。セパレータをタブとかにすべきだな
626デフォルトの名無しさん2007/05/07(月) 20:37:18
Rubyっていいの?
627デフォルトの名無しさんage2007/05/07(月) 20:55:52
?
628デフォルトの名無しさんsage2007/05/07(月) 21:38:16
>>625
しねよ
629デフォルトの名無しさん2007/05/08(火) 00:50:16
>>628
あー、もうコイツ最悪だな!!!!
質問者として、態度悪すぎ
今後、>>623には一切レスなし
630デフォルトの名無しさんsage2007/05/08(火) 01:41:21
自演乙
631デフォルトの名無しさんsage2007/05/08(火) 18:58:54
「;」以前の空白、そして「;」以降の文字を指定したいんだけど
*;.*
とすると改行まで入ってしまう。どうすれば。
632デフォルトの名無しさんsage2007/05/08(火) 19:00:14
入るじゃなくて「消える」の間違いでした。
633デフォルトの名無しさんsage2007/05/08(火) 19:21:09
あんたの使ってる処理系では . が改行にマッチしないんでしょ
挙動を変更するオプションがあるかもしれんからマニュアル嫁
634デフォルトの名無しさんsage2007/05/10(木) 22:57:23
正規表現で
「数列のみ もしくは 数字-数字-数字」

と言うのはどう書くですか?
635デフォルトの名無しさんsage2007/05/10(木) 23:09:09
\d-\d-\d|\d+
636デフォルトの名無しさんsage2007/05/10(木) 23:17:39
できました
637デフォルトの名無しさんsage2007/05/10(木) 23:34:13
文章中の 小日向(こびなた と読む) とかの文字列で括弧内と括弧を指定したいんですけど 誰か教えてください。
638デフォルトの名無しさんsage2007/05/11(金) 00:27:45
日本語未対応perlにてsjisで
^[ぁ-ん]+$
^[ァ-ヶ]+$
はどう書きますか?
639デフォルトの名無しさんsage2007/05/11(金) 01:46:21
>>638
5.8以上でutf8で扱う
それ以外に方法はない
640デフォルトの名無しさんsage2007/05/11(金) 02:31:54
^(?:\x82[\x9f-\xf1])+$
^(?:\x83[\x40-\x96])+$
641デフォルトの名無しさんsage2007/05/11(金) 13:05:29
アクセスを解析するにあたってホストアドレスをある程度まとめたいのですが
(例えば test1.test.ne.jp→*.test.ne.jp)
その場合どのように表記すると良いでしょうか?
642デフォルトの名無しさんsage2007/05/11(金) 14:51:48
全角文字ならヒットは出来ますか?
643デフォルトの名無しさんsage2007/05/11(金) 16:39:01
>>641
^.+\.test\.ne\.jp$
644デフォルトの名無しさん2007/05/13(日) 12:07:25
指定の文字列がないというのにマッチしたいのですが、いい正規表現はないでしょうか?

"HOGE MAGE"
"ARABIN DOBIN MAGE"
というのがあった場合、"DOBIN"が含まれていないつまり、"HOGE MAGE"のみをヒットさせたいです。
645デフォルトの名無しさんsage2007/05/13(日) 12:25:00
mage を拾って dobin があるか 調査する
646デフォルトの名無しさんsage2007/05/13(日) 15:01:16
>>644
その程度の処理なら態々正規表現を使うまでも無い
647・∀・)っ-○◎●sage2007/05/13(日) 15:09:25
マッチする文字列を探すのとしないのを探すのって本質的な違いってある?
648デフォルトの名無しさんsage2007/05/13(日) 15:21:57
のっと
649デフォルトの名無しさん2007/05/13(日) 16:38:44
>>645
実際には、MAGEが共通じゃない場合もあり orz

>>646
んーと、確かに、そうなんだけど、
外部で弄れる設定が正規表現になってんだわ・・・

可搬性から、ソースの方をいじりたくないのです。


とおもって検索してたんですが

Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ

これ見ると、簡単に書く方法はないのですね・・・。
正規表現も万能なわけではないのか
650デフォルトの名無しさん2007/05/13(日) 16:41:21
>>649
こちらに、含まない正規表現をジェネレータがありました。

正規表現メモ - ある文字列を含まない正規表現
http://www.kt.rim.or.jp/~kbk/regex/regex.html#NOTINCLUDED
651644=649=6502007/05/13(日) 16:42:04
x こちらに、含まない正規表現をジェネレータがありました。
o こちらに、ある文字列を含まない正規表現を生成するジェネレータがありました。
652デフォルトの名無しさんsage2007/05/13(日) 16:55:46
js弄りたい。

正規表現なるモノが解らないと少しの改変すら困難なようだ。

そうだ2chでスレを探そう

発見ナニこのスレ暗号!?

1のサイトを見よう!

脳沸騰中 ←今ココ○| ̄|_
653デフォルトの名無しさんsage2007/05/13(日) 17:31:22
日記はチラシの裏へ
654デフォルトの名無しさんsage2007/05/28(月) 01:09:39
ここがチラシの裏だろ
655デフォルトの名無しさんsage2007/05/28(月) 01:41:17
何その2週間もかけたツッコミw
のんびりした板だねここは
656デフォルトの名無しさんsage2007/05/29(火) 23:09:08
そうでもないよ
657デフォルトの名無しさん2007/05/30(水) 11:40:44
正規表現で数値チェックしています。
0〜15までの数値がOKという処理をしたいのですがうまくできませんでした。
[0-9]+[0-9]*
など考えたのですが
二桁の数値の場合、例えば19、一桁目の1にマッチしてしまうようで
本来NGにしたいのですがOKになってしまいます。
0〜15までの数値はOK。他はNG。というような正規表現はどうやって書けるのでしょうか?
658デフォルトの名無しさんsage2007/05/30(水) 11:44:09
訂正、3行目
[0-9]+[0-5]*
です。
659デフォルトの名無しさんsage2007/05/30(水) 11:46:16
(1[0-5]|[0-9])
660デフォルトの名無しさんsage2007/05/30(水) 12:56:46
正規表現の練習・確認用に
(
 1[0-5] |
 [0-9]
)
とか書くとエディットボックスに
(1[0-5]|[0-9])
と連結されて
さらにターゲットとなるテキストでマッチした行を抜き出す。
といったアプリというかGUIツールってないですかね。
それくらい自分で作ればいいんですけど・・・
661デフォルトの名無しさんsage2007/05/30(水) 14:42:48
たしかどっかのサイトにあった
URL 思い出せないけど検索したら出るだろ
662デフォルトの名無しさんsage2007/05/30(水) 16:47:30
>>21-22 はちょっとそれっぽい。
663デフォルトの名無しさんsage2007/05/30(水) 22:37:30
どうしてエディタの置換にスクリプトが使えないのは何故なんだぜ?
664デフォルトの名無しさんsage2007/05/30(水) 22:39:14
それは安物だから
665デフォルトの名無しさんsage2007/05/31(木) 09:42:26
プログラミングにメモ帳使うのはもうやめような。
666デフォルトの名無しさんsage2007/05/31(木) 11:43:10
メモ帳って

「右端で折り返す」チェックしてて
実際行が長くて折り返されてるファイルを
うっかり上書きで保存してしまうと
勝手に改行挿入されて行が分かれるよねw

前はそんなことなかったのになぁ
いつからだろ
667デフォルトの名無しさんsage2007/05/31(木) 11:45:48
メモ帳ができてから。少なくともWin3.1のときには既にそうだったと記憶している。
668デフォルトの名無しさんsage2007/05/31(木) 12:03:29
readme.txtビューアに多くを期待しすぎだ
669657sage2007/05/31(木) 12:36:29
再度質問なのですが、教えていただいた正規表現でチェックを掛けているのですが
どうも抜けてしまいます。
どこがおかしいのでしょうか。。phpで書いています。
if(!ereg("(1[0-5]|[0-9])",$chk){
//エラー処理
}
670デフォルトの名無しさんsage2007/05/31(木) 12:44:51
^(1[0-5]|[0-9])$ とか
671デフォルトの名無しさんsage2007/05/31(木) 14:44:51
(^|\D)(1[0-5]|[0-9])(\D|$)
とかか。こういうのはあまり正規表現でがんばらずに(\d+)で拾って範囲判定したほうが手っ取り早いと思うが。
672657sage2007/05/31(木) 16:11:41
>>670,671
お二方どちらでもできました。
チェック関連を正規表現で統一したかったので頑張ってました^^;
ありがとうございました。
673デフォルトの名無しさんsage2007/05/31(木) 22:14:09
>>671
俺もそう思う。

(1[0-5]|[0-9]) を見て、ぱっと 0 〜 15 を思い浮かべられる奴はそうそういない。

趣味でやってるなら余計なおせっかいだけどね。
674デフォルトの名無しさんsage2007/05/31(木) 22:29:56
(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15) が可読性を考えるとベストだなw
675デフォルトの名無しさんsage2007/05/31(木) 22:44:11
>>674
逆にその発想はなかったwwwww
676・∀・)っ-○◎●sage2007/05/31(木) 22:44:27
てか逆の方が読みやすい

([0-9]|1[0-5])
677デフォルトの名無しさんsage2007/05/31(木) 23:00:39
>>676
10以上にマッチしない
678デフォルトの名無しさんsage2007/06/01(金) 00:46:56
そんなことはない
679デフォルトの名無しさん2007/06/01(金) 00:59:29
K2Editorで改行のみの行が複数続いた場合、
1行のみ残したいのですが、どうしたらよいでしょう?
"^\n"→""と置換すると1行目と5行目がくっついてしまいます。。

(1行目)│正規
(2行目)│
(3行目)│
(4行目)│
(5行目)│表現



(1行目)│正規
(2行目)│
(3行目)│表現

680デフォルトの名無しさんsage2007/06/01(金) 01:04:49
\n{3,} -> \n\n とか?

つこうたことないから知らんけど。
681デフォルトの名無しさんsage2007/06/01(金) 13:13:31
"^\n+" ⇒ "\n"

だめ?
682デフォルトの名無しさんsage2007/06/01(金) 15:26:17
つうかエヂタスレで聞け
683デフォルトの名無しさんsage2007/06/02(土) 17:04:06
[\w\.\/\?\-]+を[\w\.\/\?-]と書く奴死ね

ハイフンはエスケープしなくても通用するが
ゴチャゴチャするからエスケープ文字が連続してるところでは
1文字ずつエスケープするのが常識なんだよ
684デフォルトの名無しさんsage2007/06/02(土) 17:17:14
[\w./?-]
685デフォルトの名無しさんsage2007/06/02(土) 17:32:51
一番最後にハイフンがあれば\-か単独の-に決まってるだろ。
そのくらいでゴチャゴチャとか言うなよ能無し
686デフォルトの名無しさんsage2007/06/02(土) 20:34:47

[\w\.\/\?-]

↓機能追加するとき

[\w\.\/\?-0-9]

ってやってしまうとどうなるの?
687デフォルトの名無しさんsage2007/06/02(土) 21:29:57
もう[-\w\.\/\?]でいいよ。
688デフォルトの名無しさんsage2007/06/02(土) 21:52:30
[\^ w ^\]vでいいよ
689デフォルトの名無しさんsage2007/06/02(土) 22:11:36
>>686
そんな無能がいる会社なら珍妙な書き方をするのも止むを得んな。
690デフォルトの名無しさんsage2007/06/02(土) 22:23:25
だいたい、正規表現を許可してるコーディング指針を決定した会社の質を疑うね。
まともな会社は正規表現禁止ってのも多い。

趣味でウェブプログラミングするくらいなら好きにすればいいけど。
691デフォルトの名無しさんsage2007/06/02(土) 22:39:35
劣悪な環境下での重労働ご苦労様です。
692デフォルトの名無しさんsage2007/06/02(土) 22:51:20
べんきよになります
693デフォルトの名無しさんsage2007/06/02(土) 23:42:48
color(red blue)やcolor(red blue black)やcolor(red bule black green)

となったときに
()の中の色を別々にとりだせますでしょうか??
694デフォルトの名無しさんsage2007/06/03(日) 00:29:10
任意個数と言うのは無理だが上限決めてがんばればできなくもない。

でもそんな無駄な努力をしてる暇があったら、カッコの中をまとめて
取り出してからsplitした方が楽。
695デフォルトの名無しさんsage2007/06/03(日) 01:35:10
正規表現使用禁止なんていわれたらその会社辞めるな・・・
696デフォルトの名無しさんsage2007/06/03(日) 02:04:08
>>694
任意個数は無理ですよね。アドバイスありがとうです。
splitを勉強してまいります。
697デフォルトの名無しさんsage2007/06/03(日) 04:18:05
>>683
出遅れたが、俺は683にあるような無用なエスケープをつけまくるほうが嫌いだ。
-に関しては譲歩の余地はあるけどね。
698デフォルトの名無しさんsage2007/06/03(日) 17:27:48
bregexp.dllで
char *target = "";
if(BMatch("/\\w+/", target + str(target), breg, msg)) printf("err:%s\n", msg);
とやると
err:invalid target parameter
となってしまうんですが、tagetが空文字列のときはマッチさせない(というかエラーを出さない)ようにはできないですか?
699デフォルトの名無しさんsage2007/06/03(日) 20:24:39
strlen(target)
700デフォルトの名無しさんsage2007/06/03(日) 23:54:10
1行のif構文でも{}きちんとつけない奴死ね
701デフォルトの名無しさんsage2007/06/04(月) 00:15:55
ぱいそんとかるびーがたいへんなことに!
702デフォルトの名無しさん2007/06/06(水) 17:44:53
パーサ書けるようになるにはどんな本を読んだらいいでつか?
703デフォルトの名無しさんsage2007/06/06(水) 17:58:36
ドラゴンブック
704デフォルトの名無しさんsage2007/06/06(水) 18:24:11
をを!やっぱりコンパイラ関連の本ですか。じつは「コンパイラの理論と実現」という本を
昨日注文しちゃったんですが、この本でも桶?
705デフォルトの名無しさんsage2007/06/06(水) 19:19:22
翻訳した文章を読むのが辛い人は中田育男
数列を解読するのが辛い人はドラゴンブック
706デフォルトの名無しさんsage2007/06/06(水) 19:45:02
>>705
どうもです。キャンセルできたんで、もう少し検討してみます。
707デフォルトの名無しさんsage2007/06/06(水) 21:55:36
AHO
708デフォルトの名無しさん2007/06/07(木) 16:30:09
>>707
一瞬ばかにされたかと思ったら、コンパイラの本のことか・・・
709デフォルトの名無しさんsage2007/06/07(木) 16:39:47
AHO本ゆうべ注文しましたよ^^
710デフォルトの名無しさんsage2007/06/07(木) 22:06:27
Rubyで2ちゃんねる専用ブラウザ(ギコナビ)のログを1行ずつ読んで、
名前、メール欄、日付、曜日、時刻、ID、その他(BEなど)、本文、スレタイ
以上を後方参照で使えるようにするにはどのように表現したら良いでしょうか?
以下にとあるスレのログサンプルを置いておきます。

名無しさん<>sage<>2007/06/07(木) 21:57:04 ID:???<> <a href="../test/read.cgi/kitchen/1181221024/1" target="_blank">>>1</a> <>専用ブラウザのログのテスト
a<><>2007/06/07(木) 21:57:52 ID:7FjnB1uN<> http://2ch.net/ <>
名無しさん<>sage<>2007/06/07(木) 21:58:35 ID:??? BE:10425941-2BP(2059)<> 改行 <br> と <br> BEのテスト <>
</b>◆h67iCpDPo. <b><>sage<>2007/06/07(木) 21:59:30 ID:???<> トリップテスト <>
711デフォルトの名無しさんsage2007/06/07(木) 22:13:39
念のため補足です。

名前<>メール欄<>日付(曜) 時刻 ID その他<> 本文<>スレタイ
で表され、メール欄、ID、その他、スレタイは投稿内容や板の設定によっては空欄の可能性があります。
712デフォルトの名無しさんsage2007/06/07(木) 22:24:09
Rubyはしらねえけど、普通に<>でsplitすりゃいいんでないの?
713デフォルトの名無しさんsage2007/06/07(木) 22:35:03
Ruby初心者スレ池
714719sage2007/06/07(木) 22:35:51
>>712
なるほど…'<>'で5つに分けて、
その後真ん中を' 'でもう一度splitすれば行けそうですね。
IDが無かった場合などの例外処理などが面倒そうですがちょっと試してみます。
715710sage2007/06/07(木) 22:38:06
名前欄間違えてた…

>>713
環境の問題などがあるかもしれないので「Ruby」と書いたのですが、
可能ならば正規表現で取り出したかったので…

スレ違いなら申し訳ない。
716デフォルトの名無しさんsage2007/06/08(金) 07:42:48
\w+にマッチし、例外的にfooにはマッチしない
というのはすんなり書けないものですかね。
717デフォルトの名無しさんsage2007/06/08(金) 08:39:38
grep -v fooしてから処理。
718デフォルトの名無しさん2007/06/09(土) 20:44:03
<table>
<tr>
<td>あああ</td>
</tr>
<tr>
<td>いいい</td>
</tr>
</table>

という$htmlがあって消したい部分は
<tr>
<td>bbb</td>
</tr>
の3行です
いろいろ検索などして
$html = preg_replace("/<tr>.+?[^<tr>].+?いいい.+?<\/td>/is", "", $html);
とやってみたのですが最初の<tr>からずばっと消えてしまいます

phpなのですが、ご教示いただけないでしょうか
719デフォルトの名無しさんsage2007/06/09(土) 22:11:17
>[^<tr>]
アチャー
720デフォルトの名無しさん2007/06/09(土) 23:29:44
          人
         / 0.ヽ
         // ||ヽヽ
        (( / ヽ))
         ヽヽ//
          ヽ/   
721デフォルトの名無しさん2007/06/10(日) 03:21:26
あのさ、最初の例のどこに消したいという bbb を内容にもっているtd があるの? 
もうちょっとどういうテキストを扱いたいのか考えてみ。

そこに書いているのだけから考えると、改行をパターンに
入れときゃいいだけじゃないの?
<tr>\n<td>....
みたいに。


722デフォルトの名無しさんsage2007/06/10(日) 11:21:46
>>720
経産婦
723デフォルトの名無しさんsage2007/06/10(日) 15:05:37
どうもすみません

<table> <tr><td>あああ</td></tr> <tr><td>***</td><td>いいい</td></tr> </table>

本当は改行やスペースなどが入っているのですが、
“いいい“から左方向に一番近い <tr> から、右方向に一番近い </tr> までの

<tr><td>***</td><td>いいい</td></tr>

の部分を消したいです
よろしくお願いいたします
724デフォルトの名無しさんsage2007/06/10(日) 15:17:02
正規表現でやろうとするのが間違ってる
725デフォルトの名無しさんsage2007/06/10(日) 16:00:21
テンプレの>>1のPerl正規表現雑技にある

ある文字列とある文字列を含むものにマッチする正規表現

(?=.*foo)(?=.*bar)
(?=.*foo)(?=.*bar)(?=.*hoge)

てのはPerlでない場合には

(.*foo)?(.*bar)?
(.*foo)?(.*bar)?(.*hoge)?

こうなるんでしょうか?
それとも別の表現にしないといけないの?


726デフォルトの名無しさんsage2007/06/10(日) 18:08:09
>>723
PHPはよくわからないがPerlならこう書く
$html=~s{<tr><td>[^<]+</td><td>\Qいいい\E</td></tr>}{}

だが厳密にはこう書くかな
$html=~s{<table>(.*?)</table>}{
 my $lines;
 for ($1 =~ m{\s+<tr>.*?</tr>\s+}g) {
  $lines .= $_ unless m/\Qいいい\E/;
 }
 "<table>$lines</table>";
}eg;
727デフォルトの名無しさんsage2007/06/10(日) 20:02:30
>>725
(foo.*bar|bar.*foo)
(foo.*(bar.*hoge|hoge.*bar)|bar.*(foo.*hoge|hoge.*foo)|hoge.*(foo.*bar|bar.*foo))
728デフォルトの名無しさんsage2007/06/10(日) 21:10:25
>>727
(?=.*a)(?=.*b)(?=.*c)(?=.*d)(?=.*e)はどうなりますか?
729デフォルトの名無しさんsage2007/06/10(日) 21:15:21
(a.*(b.*(c.*(d.*e|e.*d)|d.*(c.*e|e.*c)|e.*(c.*d|d.*c))|c.*(b.*(d.*e|e.*d)|d.*(b.
*e|e.*b)|e.*(b.*d|d.*b))|d.*(b.*(c.*e|e.*c)|c.*(b.*e|e.*b)|e.*(b.*c|c.*b))|e.*(b
.*(c.*d|d.*c)|c.*(b.*d|d.*b)|d.*(b.*c|c.*b)))|b.*(a.*(c.*(d.*e|e.*d)|d.*(c.*e|e.
*c)|e.*(c.*d|d.*c))|c.*(a.*(d.*e|e.*d)|d.*(a.*e|e.*a)|e.*(a.*d|d.*a))|d.*(a.*(c.
*e|e.*c)|c.*(a.*e|e.*a)|e.*(a.*c|c.*a))|e.*(a.*(c.*d|d.*c)|c.*(a.*d|d.*a)|d.*(a.
*c|c.*a)))|c.*(a.*(b.*(d.*e|e.*d)|d.*(b.*e|e.*b)|e.*(b.*d|d.*b))|b.*(a.*(d.*e|e.
*d)|d.*(a.*e|e.*a)|e.*(a.*d|d.*a))|d.*(a.*(b.*e|e.*b)|b.*(a.*e|e.*a)|e.*(a.*b|b.
*a))|e.*(a.*(b.*d|d.*b)|b.*(a.*d|d.*a)|d.*(a.*b|b.*a)))|d.*(a.*(b.*(c.*e|e.*c)|c
.*(b.*e|e.*b)|e.*(b.*c|c.*b))|b.*(a.*(c.*e|e.*c)|c.*(a.*e|e.*a)|e.*(a.*c|c.*a))|
c.*(a.*(b.*e|e.*b)|b.*(a.*e|e.*a)|e.*(a.*b|b.*a))|e.*(a.*(b.*c|c.*b)|b.*(a.*c|c.
*a)|c.*(a.*b|b.*a)))|e.*(a.*(b.*(c.*d|d.*c)|c.*(b.*d|d.*b)|d.*(b.*c|c.*b))|b.*(a
.*(c.*d|d.*c)|c.*(a.*d|d.*a)|d.*(a.*c|c.*a))|c.*(a.*(b.*d|d.*b)|b.*(a.*d|d.*a)|d
.*(a.*b|b.*a))|d.*(a.*(b.*c|c.*b)|b.*(a.*c|c.*a)|c.*(a.*b|b.*a))))
730デフォルトの名無しさんsage2007/06/10(日) 22:34:44
>>727
順番を考慮したパターンを書かないといけないんだね。
ありがとう。
731デフォルトの名無しさんsage2007/06/10(日) 23:51:39
>>723(元レスは多分718ってことで)ってphpの正規表現では
出来ないのかな。
perlの例は726が書いてるけど、phpだったらstrposとかで
該当する部分を切り出しておいて投げる、みたいなことを
しなくちゃいけないのかなあ。

#うちもperl→phpにシフトする案件が結構増えてるんですさん。
732デフォルトの名無しさんsage2007/06/11(月) 00:15:37
>>723
正規表現だけでは出来そうで出来ない
プログラマ脳では出来そうなんだけどね
733デフォルトの名無しさん2007/06/11(月) 00:35:33

こんなこともできないのか〜〜〜〜〜〜、正規表現

734デフォルトの名無しさんsage2007/06/11(月) 00:37:59
適材適所
735デフォルトの名無しさんsage2007/06/11(月) 00:39:02
というかネストに制限の無いような対象は正規表現の最も苦手とする分野の一つだろう。
736デフォルトの名無しさんsage2007/06/11(月) 00:40:07
そもそも本来の正規表現はネスト扱えねえし。
737デフォルトの名無しさんsage2007/06/11(月) 06:04:47
どこで聞けばいいのかわからないのでここで質問させてください。

文字実体参照にマッチさせるにはどうしたらいいんでしょう?
「hoge」 にも 「ho&#8206;ge」 にも 「h&#lrm;o&#8207;g&#rlm;e」 にもマッチするような…
738デフォルトの名無しさんsage2007/06/11(月) 09:31:58
hoge|ho&#8206;ge|h&#lrm;o&#8207;g&#rlm;e
739デフォルトの名無しさんsage2007/06/11(月) 10:01:04
レスさんくすです。でもちょっと違ってて、
737はあくまで例で、どんな実体参照の一文字が入っててもOK、見たいなこと出来ませんか?

h?o?g?eの正規表現版みたいな感じで…
740デフォルトの名無しさんsage2007/06/11(月) 12:33:45
普通は、実体参照を解決するフィルター通してから処理しない?
或いは逆に、全て実体参照にしてから処理するかw
741デフォルトの名無しさんsage2007/06/11(月) 16:57:58
/h(&.+;)?o(&.+;)?g(&.+;)?e/
742デフォルトの名無しさんsage2007/06/11(月) 18:54:24
>>741
さんくすぅ!思ったとおりの動作になりました

>>740
JaneでNGワードに指定しても、文字間に実体参照入れてNGを回避してくる輩がいるもんで…
743デフォルトの名無しさんsage2007/06/11(月) 18:59:48
/Se(&&'xEFcs):;SEXswd$3"#11!-~|^-Grvdxa?>0./-feFDCSexf%&(=-#%b,/
744ぴかちゅう2007/06/12(火) 13:49:07
文字列がルール部に記載されている2つ以上のパターンに一致する場合、lexではどのような規則で一致するパターンを一意に決めているかどうかってどういった意味かわからないんですが…
教えてください!
745デフォルトの名無しさんsage2007/06/12(火) 13:59:58
>>744
なんかの課題か?

746デフォルトの名無しさんsage2007/06/12(火) 14:02:38
flexのマニュアルに書いてあるから読めよ
747ぴかちゅう2007/06/12(火) 14:02:39
学校の課題なんです…
748ぴかちゅう2007/06/12(火) 14:06:35
マニュアルってどこにあるんですか?
749デフォルトの名無しさんsage2007/06/12(火) 16:44:46
ぐぐれ。
ですませたいところだが別のflexが
ひっかかるようだからサービスしておこう

http://www.asahi-net.or.jp/~wg5k-ickw/html/online/flex-2.5.4/flex_toc.html
750デフォルトの名無しさんsage2007/06/16(土) 23:16:15
「私のことが私のことが」「試験場試験場」

みたいな3語以上の表現の繰り返しを探したいんですが、
正規表現チェッカーというソフトでは

(.+)(.+)\1\2

で、抜き出されるんですが、Devasというソフトだとmax regex search depth
 exceededとエラーが出ます。神様、お導きを・・・
751デフォルトの名無しさんsage2007/06/16(土) 23:57:18
>(.+)(.+)\1\2
それだと2文字以上の繰り返しのような気が。
(...+)\1
だとどう?
752750sage2007/06/17(日) 00:23:11
レスサンクスです。

> (...+)\1

これもだめですー。(><)
753デフォルトの名無しさんsage2007/06/17(日) 00:31:24
複数ファイルの置換ならDevasの代わりに
speeeeed + bregonig.dll を使うとか。
754デフォルトの名無しさんsage2007/06/17(日) 02:59:34
>>750
どのくらいの大きさのファイル食わせた?
エラーメッセージからすると、バックトラック用に積んでいたスタックが
あふれたという感じだけど。

750のパターンでも、751でもマッチする文字列が見つからない場合にバックトラック用に
スタックに積んでくのは結構な寮になると思うぞ。
検索する語の最大長を指定するなりしてはどうか。
そのツールでできるかは知らんがね。

755デフォルトの名無しさんsage2007/06/17(日) 05:10:23
(.+)(.+)\1\2


これが乳房AAに見えて仕方ない。orz
756デフォルトの名無しさんsage2007/06/17(日) 06:21:58
いや、おれは 21エモンにでてくるゴンスケとかいうロボット。
ついでにいうと、NHK大阪の夕方の女子アナの顔な。
757デフォルトの名無しさんsage2007/06/17(日) 13:48:58
おお、確かにゴンスケにみえるw
758デフォルトの名無しさんsage2007/06/17(日) 13:57:12
斜め上のところに陥没があるおっぱい=乳癌
759750sage2007/06/17(日) 14:00:34
レスサンクスです。

>>753
探して使ってみます。

>>754
一つのファイルは100〜500kくらいですが、フォルダ内のファイル全部では330Mほどになりますです。Devas以外ではKWIC Finderというのを使っていて、こちらは完全にプログラムが落ちます。

>検索する語の最大長

なるほど。ありがとうございます。
760デフォルトの名無しさん2007/06/18(月) 14:29:50
「★」のある文字列には一致するけど、
「@株主 ★」があると一致しない正規表現を教えてください。
761デフォルトの名無しさん2007/06/18(月) 17:17:04
(?<!@株主 )★
762デフォルトの名無しさん2007/06/18(月) 17:33:56
ぼくの肛門も性器です
763デフォルトの名無しさんsage2007/06/18(月) 17:37:10
ごめんなさい、JavaScriptで使うから戻り読み使えないんです。別の方法ありますか
764デフォルトの名無しさんsage2007/06/18(月) 18:14:02
>>763
書けるけどすごくめんどくさいよ。

「a」があるけど「xya」がない文字列ならこんな感じ。文字数ふえても
同じようなやりかたでいけるはず。

^([^a]*(([^x]|^)y|[^y]|^)a)+[^a]*$

「★」があるかどうかの判定と「@株主 ★」がない判定の2つに分ける
ことをオススメする。
765デフォルトの名無しさんsage2007/06/18(月) 18:32:05
>>764
できました!
^([^★]*(((([^@]|^)株|[^株]|^)主|[^主]|^) |[^ ]|^)★)+[^★]*$
ブラウザの設定を弄ってるのでそういった分岐は書けないんです。助かりました。
766デフォルトの名無しさんsage2007/06/18(月) 20:48:10
WindowsXPの標準テキストエディタである、NotePad上の文字列を
正規表現(自分で作ったルール)を使って文字列を変換すると、

パソコンで表現



パャRンで阜サ

のように変換されてしまいます。

これは、自分で作った変換ルールに誤りがあるからでしょうか?
変換には、クリップボード拡張ソフト「ペースター」のv3.08を使っています。

変換ルールは
s/^\s+|\n+|\\|\/|\:|\,|\;|\?|\"|\<|\>|\|//gm
です。
これは、Web上の文字列を、そのままコピペしてWindows上のフォルダ名にしたい時に、
(フォルダ名として)不適切な文字(\/:,;*?"<>|)や、他に、改行、空白を取り除く事を目的としています。

どのようにすれば改善されるか分かる方いませんか?
767デフォルトの名無しさんsage2007/06/18(月) 21:14:01
いつからメモ帳は正規表現をサポートするようになったんだ?
768デフォルトの名無しさんsage2007/06/18(月) 21:25:26
>>767
文盲ワロタw
769デフォルトの名無しさんsage2007/06/18(月) 21:40:08
>>766
改善っていうか、それは正しく稼働した結果じゃねーの?

パソコンで表現
8370 835C 8352 8393 82C5 955C 8CBB
パャRンで阜サ
8370 83-- 8352 8393 82C5 95-- 8CBB

shiftjisのコードから、0x5Cが排除された結果みたいだし
770デフォルトの名無しさんsage2007/06/18(月) 22:47:31
シェアウェアの癖にマルチバイトに非対応ってこと?
771デフォルトの名無しさんsage2007/06/18(月) 22:56:57
テンプレサイトを見ればわかるが完全に近い漢字対応はむしろ少数派で
何かしら制約やら性能低下を伴うのが普通。
例外が鬼車とかboostとかなわけで。

GNU grepのdfa.c見てるけど歴史の呪縛感じるなぁ。
772デフォルトの名無しさんsage2007/06/18(月) 23:55:57
しょぼいシャーウェイにするぐらいなら秀丸にすればよいのに
773デフォルトの名無しさんsage2007/06/19(火) 00:01:54
言わしてもらうと正規表現エンジンのような
細かい設計と精密なデバッグを要求する職人芸は
商用ソフトでは採算が取れないだろう。

気の遠くなるような時間を浪費できるフリーソフトならではの世界w
774デフォルトの名無しさんsage2007/06/19(火) 10:38:37
文字列絡みはテストケース書きやすい方だと思うが
775766sage2007/06/21(木) 01:06:31
みなさんレスありがとうございます。
アプリ側の限界という結論になるのでしょうか?
仕方ないですね。

2chブラウザJaneを使っているんですが、更新チェックしていたつもりが、
なぜかこのスレだけチェックされていませんでした。
返信がおそくなってすいませんでした。
776デフォルトの名無しさんsage2007/06/21(木) 14:46:11
>>775
んーと、そのソフトの仕様的に可能なのかはわかんないけど、
Shift_JIS に合致するモノは残す、という方針でいけないかな?

s/(([\w\d\xA1-\xDF\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])|(.))/\2/gm;
777デフォルトの名無しさんsage2007/06/22(金) 01:54:42
まるでEmacsLispでの正規表現見るような\の群れだな…
778デフォルトの名無しさんsage2007/06/22(金) 09:15:21
オブジェクト指向正規表現マダー?
779デフォルトの名無しさんsage2007/06/22(金) 09:58:43
>>777
だよね・・・
最初エスケープ付けずに書いてたんだけど、
どの文字がエスケープ不要でどの文字が必要かあやふやだったので、
いっそのこと、全てに付けた方がすっきりすると思ってあんなコードに・・・

問題: A と等価な正規表現になるように B を必要最小限エスケープして下さい (持ち込み不可)
A: /[\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]/
B: /[!#$%&'()+-.=@[]^_`{}~]/
780デフォルトの名無しさんsage2007/06/22(金) 10:16:35
>>779
宿題はスレ違い
781デフォルトの名無しさんsage2007/06/22(金) 10:18:55
>>779
/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]/
782デフォルトの名無しさんsage2007/06/22(金) 11:01:35
>>780
最新十数レスぐらい読もうよ
783デフォルトの名無しさんsage2007/06/22(金) 11:03:47
>>781
残念ながら間違い。ね、難しいでしょ?
よっぽど Perl に精通してるならともかく、そうでないのなら、
全てエスケープする、というルールの方がずっとシンプルで良いと思うんだけどなあ。
まあ、時と場合によって使い分けも必要かなとも思うけど。
784デフォルトの名無しさんsage2007/06/22(金) 13:21:05
で、正解は?
785デフォルトの名無しさんsage2007/06/22(金) 13:22:12
[^_`]/
786デフォルトの名無しさんsage2007/06/22(金) 13:34:39
/[!#\$%&'()+\-.=@[]^_`{}~]/
787779sage2007/06/22(金) 17:30:13
>>784
すみません、出題しといてなんですが、私には難しくてわかりません。
エスケープしない派の方、教えて下さい。

こうかなあ?間違ってそうだなあ。
/[!#\$%&'()+\-.=@[\]^_`{}~]/

順番入れ換え可ならもっと短くなるかな。
/[]!#\$%&'()+.=@[^_`{}~-]/
788デフォルトの名無しさんsage2007/06/22(金) 18:30:50
実際に使えばすぐ分かるよ
789デフォルトの名無しさんsage2007/06/22(金) 19:51:55
なるほど。
すると、このスレで実際に使ってる人はあまりいないようですね・・・
790デフォルトの名無しさんsage2007/06/22(金) 21:04:05
逆にエスケープつけると演算子に変わるのがある。

sedの/\(A\)/はRubyの/(A)/と同じ。
sedの/(A)/はRubyの/(A)/と同じ。

だから、ムダにエスケープ付けるなが正解だし
プログラム作る人の都合だからどっちが真実でもないw
791デフォルトの名無しさんsage2007/06/22(金) 21:04:48
ちょと打ち間違いw
sedの/(A)/はRubyの/\(A)\/と同じ。
792デフォルトの名無しさんsage2007/06/22(金) 21:07:45
>>783
>>781のどこが間違い?
793デフォルトの名無しさんsage2007/06/23(土) 00:02:41
>>790
> だから、ムダにエスケープ付けるなが正解だし

正解と言えるかなあ?
Ruby を引き合いに出してるみたいだから言及するけど、
「記号を全て \ でエスケープする」というルールにしておけば、
Perl でも Ruby でも同じ正規表現が使える、という利点もあります。

めんどくさいルールを覚えなくてもとにかく全部 \ エスケープすればいい、
という仕様は lwall の優しさだと思っているんですが、どうでしょうか?

>>792
実際に使えば・・・、じゃなくて、実際にテストすればわかると思いますが、
$ や @ はエスケープしないと変数展開されてしまいますが、
エスケープしたらしたで今度は '\$' や '\@' というリテラル文字列として扱われ、
文字クラスに '\' が含まれてしまうことになります。
詳しくは perldoc perlre にそのものずばり書いてますのでそちらを参照ください。
ねえ、だから難しいんですってば。
794デフォルトの名無しさんsage2007/06/23(土) 00:31:12
>>793
>>781をもう一度目ぇかっぽじってよく見てみろ
795デフォルトの名無しさんsage2007/06/23(土) 00:32:01

エスケープしたら…以降読んでなかった
目ぇかっぽじって読むのは自分だった
796デフォルトの名無しさんsage2007/06/23(土) 00:34:15
謝るの忘れてた
ごめん
797デフォルトの名無しさんsage2007/06/23(土) 02:14:51
794はツンデレ
798デフォルトの名無しさんsage2007/06/23(土) 03:15:14
>>793
メタ文字を、記号の場合はすべて\の前置なし、アルファベットは前置するとしたのは
lwallのえらいところだと思うけどね。

ブラケットの中では
・記号類のメタ文字無効
・] と - は置き場所によってはエスケープ不要
・delimiterによってjは / をエスケープする必要がある
・interpolationを防ぐため$ をエスケープしておいたほうが良い
てとこ?

Cのカッコと同じで、わかりやすくするためにつけたい奴はつければいいんじゃないの?
俺はそういうやり方は好かないどね。

> エスケープしたらしたで今度は '\$' や '\@' というリテラル文字列として扱われ、 
> 文字クラスに '\' が含まれてしまうことになります。 
> 詳しくは perldoc perlre にそのものずばり書いてますのでそちらを参照ください。 

\も含まれてしまうというこれ再現しないんだが(ActivePerl 5.8.8)。
あとpetlreのどの辺りなのかも教えてくんなまし。
それらしいところが見当たらない。
799デフォルトの名無しさんsage2007/06/23(土) 06:31:01
文字コードで指定するんじゃだめなん?
\xとか\uとか
800デフォルトの名無しさんsage2007/06/25(月) 10:01:25
>>798
> \も含まれてしまうというこれ再現しないんだが(ActivePerl 5.8.8)。

マジっすか?
漏れがテストに使ったコードを貼っておきます。

my $src = <DATA>; chomp($src);
my $exp = $src;
$exp =~ s/[\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]//gm;
my $dst = $src;
$dst =~ s/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]//gm;
print "EXP: [$exp]\n";
print "DST: [$dst]\n";
printf "%s\n", ($dst eq $exp) ? "OK" : "NG";
__END__
1A!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

> あとpetlreのどの辺りなのかも教えてくんなまし。

| You cannot include a literal "$" or "@" within a "\Q" sequence. An
| unescaped "$" or "@" interpolates the corresponding variable, while
| escaping will cause the literal string "\$" to be matched. You'll need
| to write something like "m/\Quser\E\@\Qhost/".
801デフォルトの名無しさんsage2007/06/25(月) 16:01:13
まて。
そりゃブラケットの外の話だろう。
ブラケットの中では、記号で表されるメタ文字は
二つの例外を除けば普通の文字だから
\Qとか使う必要ないって。つか無意味。
逆にこれをしているせいで\もマッチするように
なってしまっている。

perlreのversion 8 Regular Expressionの
三番目のパラグラフのあたりをよく読んでごらん。
802デフォルトの名無しさんsage2007/06/25(月) 16:45:14
えーと、「\Qとか使う必要ないって。つか無意味。」というのは同意です。

けど、 \Q...\E については、ブラケットの中でも効いていると思います。
\t とか \r とか \n とか \x1B とかも使えますけど、それと同等だと思います。

> Because patterns are processed as double quoted strings,
> the following also work:
803デフォルトの名無しさんsage2007/06/26(火) 01:53:21
>>802
無意味っていったのは、効く効かないという意味でじゃなくてね。

 s/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]//gm; 
だと、\$ はそれぞれに対して\Qの効果が反映するから、\\\$になって
ブラケットの中に含まれる文字の中に\ も入るよ。
この\は$のエスケープのためにいれてんだから意味ないんじゃね?
つーことなんだけど。

 [$] はエラーになるけど、[\$] はエラーにならなくて、かつ$は含まれていて
\は含まれない。ということで  >>793 で求めているものはこれでいいんじゃないの?

>perl -e "print qr<[\Q\$\E]>"
(?-xism:[\\\$])
>perl -e "print qr<[\$]>"
(?-xism:[\$])
>perl -e "print qr<[$]>"
Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE 5.008008/

長くなった。すまん、
804デフォルトの名無しさんsage2007/06/26(火) 02:48:20
>>803
ああ、やっと >>801 の言っている意味がわかりました。了解です。

つか、それを私も >>783, >>793 で指摘したつもりだったんですが・・・
まあいいや。
805デフォルトの名無しさんsage2007/06/26(火) 05:39:55
エヂタの色分けでエスケープし忘れているかどうかをわかるようにすれば一挙に解決
806デフォルトの名無しさんsage2007/06/27(水) 22:56:50
UTF-8完全対応でegrepってまだだっけ?
つか今出せば早期対応なのかな。
807デフォルトの名無しさんsage2007/06/28(木) 02:08:56
>>806
どういう意味で完全対応ってのを使っているのかわからんが、
GNU grep はUTF-8でもちゃんと動くぞ。
#grep -E でegrep相当の動作。もっとも egrep という名前でシンボリックリンクが
#作られてたりするけどね。
808デフォルトの名無しさんsage2007/06/28(木) 09:59:26
lgrep はダメなんだっけ?
809デフォルトの名無しさんsage2007/06/28(木) 19:58:36
lgrepはgrepでそ。
810デフォルトの名無しさんsage2007/06/29(金) 22:06:19
>>809
は?
811808sage2007/06/30(土) 13:25:22
>>810
egrep ではない (拡張正規表現は扱えない) と言いたかったんじゃないかな。

ハッキリそう言えば良いのに、と思わないでもないが。
812デフォルトの名無しさんsage2007/06/30(土) 21:03:19
ある文字列を含まないものにマッチする
正規表現の使い方教えてください。
$str = "sfhipsfpihosf";
#$str = "fdjsdfesfifoo";
print $str =~ /(?:(?!foo).)*/ ;
結果1になってしまいます。
813デフォルトの名無しさんsage2007/06/30(土) 22:13:54
:? やめて何にマッチしてるのか見ればいいのに
814デフォルトの名無しさんsage2007/07/01(日) 00:44:04
>>812
print $str !~ /(?:(?!foo).)*/ ;
815デフォルトの名無しさんsage2007/07/01(日) 14:29:22
「aという文字とbという文字とに挟まれた2桁の数字」
にマッチする正規表現が分からないので教えて下さい。aとbは含みません。
よろしくお願いします
8168152007/07/01(日) 14:30:23
ID出しておきます
817デフォルトの名無しさんsage2007/07/01(日) 14:32:22
いいえ、出ません。
818デフォルトの名無しさんsage2007/07/01(日) 14:33:22
/(?:a[0-9][0-9]b|b[0-9][0-9]a)/
819デフォルトの名無しさんsage2007/07/01(日) 14:34:23
(?<=a)[1-9][0-9](?=b)
820815sage2007/07/01(日) 14:51:01
>>817
出ませんね;;;

>>818
aとbも含まれてしまいました……

>>819
情報の後出しになってしまって申し訳ないのですが、
JavaScriptで使いたいのですが正規表現のエラーが出ました
821815sage2007/07/01(日) 14:55:15
すみません、正規表現に頼らず出来そうなのでそちらでやります。
ありがとうございました
822デフォルトの名無しさんsage2007/07/01(日) 14:55:47
記憶によればJavaScriptは戻り読みが出来ない
823デフォルトの名無しさんsage2007/07/01(日) 16:44:40
>821
WScript.echo('fklsja89bfdlkj'.match(/a([0-9][0-9])b/)[1]);//必ずある場合
WScript.echo(('fklsja8df9bfdlkj'.match(/a([0-9][0-9])b/))?RegExp.$1:'null');//有るかどうかわからない場合
824デフォルトの名無しさんsage2007/07/01(日) 21:48:14
(?:[ab])(\d\d)(?:[ab])
825デフォルトの名無しさんsage2007/07/02(月) 00:27:37
明らかに角括弧余分だろ
826デフォルトの名無しさんsage2007/07/02(月) 02:38:28
>>825
「aという文字とbという文字とに挟まれた2桁の数字」
という質問に対しては、
anna
annb
bnna
bnnb
という組み合わせが考えられる
827デフォルトの名無しさんsage2007/07/02(月) 03:13:02
annb
bnna
どっちかだろ
まあ既に解決したみたいだが
828デフォルトの名無しさんsage2007/07/03(火) 17:10:05
>>826
annaはbという文字にはさまれてないだろ。
829デフォルトの名無しさんsage2007/07/03(火) 19:51:55
サクラエディタって(?<=)
これないの?
830デフォルトの名無しさんsage2007/07/03(火) 20:32:36
正規表現で二つ以上の改行をひとつでまとめる処理をしたいのですが、
どのように記述すればよろしいでしょうか?
[\r\n]+ を \r\n で置換しようとしたところ、例えば三つ以上ある改行が
三つの改行に変換されるだけで変化が起こりません。
831デフォルトの名無しさんsage2007/07/03(火) 22:48:39
>>830
それで、使用している処理系も試したコードも晒さないのには何か理由でもあるのかね?
832デフォルトの名無しさんsage2007/07/04(水) 02:00:04
>>829
戻り読みか。
鬼車を使っているバージョンなら使えるはずだが、そうでなければ使えない。
833デフォルトの名無しさんsage2007/07/04(水) 02:05:28
Bregexp.dllでサクラエディタですが、

否定の先読みで改行のみの行も同時に省きたいとき、
^(?!abc.+)\r\n
ではだめで、
^((?!abc).+)\r\n
ならおkでした。なんで?

834デフォルトの名無しさんsage2007/07/04(水) 02:55:56
>>833
すまんが「改行のみの行『も』」というなら、どういう行をマッチさせたかったのか
書いてはくれまいか?
835830sage2007/07/04(水) 21:13:35
サクラエディタで、使ってる処理系はWindows・・・です(この回答で合ってるかは不明)
------ a.txt -------



a

b



c
------------------

このようなファイルがあった時、改行が無駄なので
------------------
a

b

c
------------------

といった風に置換させたいのです。
試したやり方は置換前の文字列で [\r\n]+ 置換後の文字列で \r\n
です。すみません、わかりにくかったらスルーしてください。
836デフォルトの名無しさんsage2007/07/04(水) 21:49:53
サクラエディタは複数行にわたる置換はできなかったはず。
837831sage2007/07/04(水) 22:12:29
>>835
いや、その回答でおけ。

で、サクラエディタをインスコして試してみたけど、 >>836 の言うとおりみたい。
たとえば、 >>835 の例のテキスト (10行ある) で [\r\n]+ を「すべて置換」してみると、
「10箇所を置換しました。」って出るので、改行は一行ごとにしか処理できないっぽい。
838デフォルトの名無しさんsage2007/07/04(水) 22:25:16
手作業でやるんだったら、

[\r\n]+ ⇒ ##@@## に変換
##@@##+ ⇒ \r\n に変換

でいけるべ。
839835sage2007/07/04(水) 22:46:55
>>836-838
ありがとうございました。>>838様のレスでどうやら解決できたようです。
>>837様におきましては、インストールしてまで試して頂いきお手間をかけて
しまって何だか申し訳ないです。しかしともあれありがとうございました(*´Д`)
840833sage2007/07/04(水) 23:12:44
>>834
行頭がabcで始まらない全ての行全体。

自己レスだけど、内側の()は否定の先読み指定文字列で、外側はキャプチャ範囲かな
841834sage2007/07/05(木) 02:21:41
>>840
ああ、そういうことね。

^(?!abc.+)\r\n 
こっちだと、先読みに .+ を含めちゃっているので実際にマッチした文字列には反映されないでしょ。

^((?!abc).+)\r\n 
こっちは先読みの外に .+ があるから、マッチには行頭から \r\nまでの内容がすべて含まれる。
先読みはマッチそのものの結果を得るだけでマッチした部分はどこにも残らないから。
842デフォルトの名無しさんsage2007/07/05(木) 12:47:19
phpで投稿された文字列が半角+改行コードのみかどうか調べたいのですが

if(preg_match"/" ^[^a-zA-Z0-9]*$ "/"){全角も入ってるよ;}

こんな感じでいいのでしょうか?
この場合改行文字の扱いがされなさそうですが・・・
843デフォルトの名無しさんsage2007/07/05(木) 13:16:38
/[^[:print:]\r\n]/ とか
844デフォルトの名無しさんsage2007/07/05(木) 13:32:25
「:」も半角だけど
845デフォルトの名無しさんsage2007/07/05(木) 17:46:01
半角だけど、何?
846デフォルトの名無しさんsage2007/07/07(土) 03:48:32
鬼車をソフトに組み込もうと思ってるのですが
改行コードの\r\nを\nひとつみたいに振る舞えさせることってできますかね?
たとえば
.は\rにマッチしてしまいますがマッチしないように
\nは\nだけにマッチしますが\r\nにマッチするように
\sは\rと\n1個ずつマッチしていきますがいっきに\r\nにマッチするようにって感じです。
847デフォルトの名無しさんsage2007/07/07(土) 04:27:45
>振る舞えさせる
振る舞え……
848デフォルトの名無しさんsage2007/07/07(土) 08:09:13
>>846
USE_CRNL_AS_LINE_TERMINATOR
849846sage2007/07/07(土) 15:01:31
>>847
振る舞わせるか
>>848
どうもありがとうございます、でも
USE_CRNL_AS_LINE_TERMINATORを有効にしてコンパイルしてみましたが
求めていたのとはちと違うみたいです。
850デフォルトの名無しさんsage2007/07/07(土) 17:40:14
どう違うんだろうと思ったが、USE_CRNL_AS_LINE_TERMINATORは
$の挙動が変わるだけだっけ?
851デフォルトの名無しさんsage2007/07/09(月) 01:01:06
気軽に「こんなソフトありませんか?」スレから誘導されて来ました。
現在使用しているソフトはこちらのRepl-Aceというものです。
ttp://www.sirmiles.com/software/repl_ace.htm

(1)「AあBいAうえBおあAいうえBおあいAうえおあBいうえお」
(2)「A亜BイA宇江BオアA井宇江BオアイA宇江尾亜Bイウエオ」

A以降 あいうえお→亜井宇江尾
B以降 あいうえお→アイウエオ

正規表現というと今まで改行や空白の処理にしか使っていなかったのですが、
上記のような文字列に関して、(1)から(2)に変換する処理を行おうとするに当たり、
こういった特定の文字を境に別々の変換をするのも正規表現を使うことで可能であるとお聞きして、
>>1の二番目のサイトの“タグの外側だけ対象に置換する”で<>をABと考えるのが近いかと思ったのですが、
そのまま貼り付けても処理に失敗し、下のサポートする正規表現の一覧に載ってない記号が多く、
ttp://www.sirmiles.com/software/repl_ace/contents/regexp.htm
自分ではもはや何をどう変えたらいいやらお手上げですので、どなたかご指南ください。
852デフォルトの名無しさんsage2007/07/09(月) 02:22:17
そりゃ一対一の文字ごとの置き換えでないかい?
正規表現でどうこうって話じゃないと思うが。

一部の言語でできる、置換部に関数を置くこととができるならそりゃまあ
書けなくもないだろうけど、そういうのはサポートしてないんでしょ? これ。
853デフォルトの名無しさんsage2007/07/09(月) 11:22:12
ttp://www.uploda.org/uporg896130.zip.html

851の(1)から(2)へ変換するスクリプト
適当に改造して使え
854デフォルトの名無しさんsage2007/07/09(月) 23:39:54
>>852
当該スレを紹介されるにいたった経緯など、詳細はこちらをご参照ください。
http://pc11.2ch.net/test/read.cgi/software/1183546269/200-
回答者の方が今のソフトでも正規表現で出来るとおっしゃいまして、自分なりに考えたのが、

A以降でBより前のあ→亜
A以降でBより前のい→井



B以降でAより前のお→オ

というように一つ一つ指定していく上で、“X以降でYより前”の部分を正規表現で
示せるのではないかというものなのですが、やはり不可能なのでしょうか。
置換部に関数を置くとの意味がどういうことなのか分からず、試しようがないので、
サポート外か、ヘルプに記述がないだけで使えるのかは判断がつきかねます。


>>853
これは素晴らしいです。事前のファイル名とパスの指定が多少面倒とはいえ、
100KBほどの大きなドキュメントの置換も問題なく、動作は申し分ありません。
正規表現とは違った形になりましたが解決しそうです。まことにありがとうございました。
855デフォルトの名無しさんsage2007/07/09(月) 23:52:38
>>854
直感的には、めんどい手順を何度も踏めば
正規表現置換でできると思われる

けど、やっぱり正規表現向きじゃないね。
回答者の人が君の質問を誤解してるか、
或いは正規表現の機能を誤解してるんだと思う。
856デフォルトの名無しさんsage2007/07/09(月) 23:57:17
>>854
(A[^Bあ]*)あ([^B\n]*[B|\n]) -> \1亜\2
こういうのを全文字分用意すればいけそうな気がするが、
めんどくさいからスクリプト使え。
855に同意。
857デフォルトの名無しさんsage2007/07/11(水) 02:04:22
>>855-856
面倒と言ってもその程度によりけりで、いったん定義ファイルを組んでしまえば、
後は次々放り込むだけで済むなら、最初に全文字分用意するくらい苦でもないのですが、

(1)「AあBあAああBああAあああBあああAああああBああああ」
(2)「A亜BアA亜亜BアアA亜亜亜BアアアA亜亜亜亜Bアアアア」

(A[^B]*)あ([^B]*B)→$1亜$2 では、それぞれAからBの間の後の一文字のみが変換され、
(A[^Bあ]*)あ([^B]*B)→$1亜$2 ですと、それが前の一文字のみになり、
(A[^Bあ]*)あ([^Bあ]*)あ([^B]*B)→$1亜$2亜$3 とすると、半端に前から二文字目までの上、
AからBまでにマッチする文字が二つに満たないグループがスキップされてしまいます。
置換箇所が0になるまで繰り返せばいいと言われればそれまでですけれども、
どうにかAからBまでの間の複数の置換を特定する方法はないものかだけが心残りです。
858デフォルトの名無しさんsage2007/07/11(水) 13:59:10
適材適所って言葉知らんのか。
明らかに正規表現にやらせる仕事じゃないだろ。
859デフォルトの名無しさん2007/07/11(水) 20:30:14
>>857
マクロ組め
860デフォルトの名無しさんsage2007/07/11(水) 21:40:50
っつうかそこまでわかってるなら、
いい加減それがエディタの制約だってことに気づけ。

つまり、複数の置換を同時に行う機能が無いんだよ。
861デフォルトの名無しさんsage2007/07/11(水) 21:48:32
スレ違いだったら誘導願います。

IPアドレスレンジを指定して正規表現を生成してくれるような汎用ツールは
ありませんでしょうか?

Web限定だとグーグル先生が公開してますが、このような物をローカルで
CUIで使いたいのです。

ttps://adwords.google.co.jp/support/bin/answer.py?answer=50012&topic=8157

用途は6000行程あるIPアドレスのレンジを置換等を駆使して手動で
正規表現を作成してたのですが、大分辛くなってきたので・・・
862デフォルトの名無しさんsage2007/07/11(水) 21:56:53
>>861
正規表現でやるこっちゃ無い。
ビットマスクでやったほうが圧倒的に速いし簡単。
863デフォルトの名無しさんsage2007/07/11(水) 21:59:37
>>862
詳しく教えてもらえませんか?

864デフォルトの名無しさんsage2007/07/11(水) 22:11:47
ビットマスクじゃ範囲とってこれないだろ
865861sage2007/07/11(水) 22:23:13
要件は>>861の通りなのですが、経緯も説明させてもらいます。

イントラのあるサーバにアクセスしてきた端末が固定かDHCPで割り
振られているかを判断する必要があり、DHCPサーバのconfigから
range設定を拾い、正規表現を作成 ⇒ grepをかける、
というような感じです。

range設定はビットやマスクではなく、

10.192.17.3 〜 10.192.18.20

のような正規表現を作成しようとしている側からすると凶悪な
設定がされてます。

自分はVBSとシェルスクリプト(awk、sed含む)がちょっとだけできる
ので、自分で正規表現ジェネレータを作成しようとしましたが、
まず設計の段階であまりの複雑さに頭がパンクしました。
866デフォルトの名無しさんsage2007/07/11(水) 22:27:57
だったら尚単純だろ。

IPアドレスは4byteの符号無し整数値に変換できるから大小比較すればそれで終わり。
867デフォルトの名無しさんsage2007/07/11(水) 22:34:28
っつうか仕事なら人に頼むな
868861sage2007/07/11(水) 23:12:15
>>866
>IPアドレスは4byteの符号無し整数値に変換できるから大小比較すればそれで終わり。

それって、上で挙げたような"range設定を拾い、grepをかける"という事はできませんよね?
そういったプログラムを組め、と仰りたいのだと思いますが自分にはそこまでのスキルはありません。

アドレスレンジを正規表現にできれば汎用で使えると思い、時間をかけて調べていたのですが、
そういったツールは見つからず、またここで聞いてもわからない、という事であれば、存在
しないのだと思います。

レスしてくれた方ありがとうございました。

869デフォルトの名無しさんsage2007/07/11(水) 23:57:05
>>868
つくってくださいスレに依頼すれば。
いや、仕事なら自分でやったほうが本人のためか。
870デフォルトの名無しさんsage2007/07/12(木) 01:15:22
>868
その、グーグルのページのソースを見れば?、スクリプトで書いてあるじゃん。
871デフォルトの名無しさんsage2007/07/12(木) 01:56:21
>>868

>>870の言うとおり、要件を満たすだけなら、
スクリプトで書いてあるのでそれを使えばよい。

だけど、正規表現にすると、さっきのアドレスレンジが
^10\.192\.(17\.([3-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|((1[7-8])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))|18\.([0-9]|1[0-9]|20))$
こんな文字列に置換されてしまう。

これでは何か起きたときの保守性が悪すぎる。

どうせスクリプトか何かを使うんでしょ?
設定ファイルに
10.192.17.3 - 10.192.18.20
とか書けばそれで動くように仕組みを作るべきだね。
872デフォルトの名無しさんsage2007/07/12(木) 02:14:39
(10.192.17.3|10.192.17.4|10.192.17.4| 略 | 10.192.18.20)
みたいな正規表現を生成するのはOKなわけ?
873デフォルトの名無しさんsage2007/07/12(木) 02:15:17
ソース見てて疑問に思ったからちょっと動かしてみた。
これちゃんと動いてなくね?w

192.168.1.1〜192.168.2.9の範囲で出てきた

^192\.168\.(1\.([1-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|(([1-2])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))|2\.([0-9]))$

を使って、EmEditorで検索すると、192.168.2.20が引っかかるんだが。
874デフォルトの名無しさんsage2007/07/12(木) 03:19:29
とりあえず、一桁でやってみた。
49 235を引数で食わせたら、
((49)|([5-9][0-9])|(1[0-9][0-9])|(2[0-2][0-9])|(23[0-5]))
こういう出力が出せるようなのはできた
875870sage2007/07/12(木) 03:22:28
|(([1-2])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))
これが、余計だね。
確認もしないで、薦めてしまってすまん。
876デフォルトの名無しさんsage2007/07/12(木) 12:32:27
質問です。
小数点の書式が#0.###で
現在はこのようにしています。
^[0-9]{1,2}[[\\.][0-9]{0,1}[0-9]{0,2}]?$
これだと1や11のように二桁の数字も弾いてしまいます
二桁以内.三桁以内にするにはどうすればいいでしょうか?
また、01も弾きたいです
よろしくお願いします
877デフォルトの名無しさんsage2007/07/12(木) 12:36:58
>>876
それはどこの方言ですか
878デフォルトの名無しさんsage2007/07/12(木) 12:53:38
>>877
すいません忘れてました
XMLとJSPです
879デフォルトの名無しさんsage2007/07/12(木) 13:24:31
解決しました
ただ、01のはじき方がわかりません
880デフォルトの名無しさんsage2007/07/12(木) 13:38:07
[1-9]?[0-9]
881デフォルトの名無しさんsage2007/07/12(木) 15:03:42
>>880
おおお、先頭に&で追加したら出来ました
ありがとうございました!
882デフォルトの名無しさんsage2007/07/12(木) 15:25:42
00 → 0
010 → 10
00・・・002301 → 2301

というように、数字の頭にある0を削るのはどうすればいいでしょうか?
883デフォルトの名無しさんsage2007/07/12(木) 15:29:49
s/^0+//;
884デフォルトの名無しさんsage2007/07/12(木) 15:47:14
>>883
それだと、

00 → ""

にならないですか?
885デフォルトの名無しさんsage2007/07/12(木) 15:49:56
s/^0+([1-9]|0$)/\1/;
886デフォルトの名無しさんsage2007/07/12(木) 16:09:51
>>885
それだと、010系がうまくいかないような。
887デフォルトの名無しさんsage2007/07/12(木) 16:20:00
マジで?
888デフォルトの名無しさんsage2007/07/12(木) 16:20:49
s/^0+([0-9])/\1/;
889デフォルトの名無しさんsage2007/07/12(木) 16:28:31
>>888
やっぱり、010系が。。。
890デフォルトの名無しさんsage2007/07/12(木) 16:32:40
use strict;
$_ = "010";
s/^0+([1-9]|0$)/\1/;
print; # 10

$_ = "010";
s/^0+([0-9])/\1/;
print; # 10
891デフォルトの名無しさんsage2007/07/12(木) 16:34:40
!?( ゚Д゚)
892デフォルトの名無しさんsage2007/07/12(木) 17:20:02
>>890
あれ?
Rubyでやっているのですが、こうなりました。。。

a = "010";
/^0+([1-9]|0$)/ =~ a;
puts $1; # 1

a = "010";
/^0+([0-9])/ =~ a;
puts $1; # 1
893デフォルトの名無しさんsage2007/07/12(木) 17:29:37
それは一番目のキャプチャを表示してるだけじゃん。置換しろよ。
894デフォルトの名無しさんsage2007/07/12(木) 17:31:27
>>893
了解しました。
置換するメソッドを探してみます。
895デフォルトの名無しさんsage2007/07/12(木) 18:39:22
(´・ω・`)
896デフォルトの名無しさんsage2007/07/12(木) 20:39:59
CHIKANCHIKAN - 痴漢メソッド

ある一定の値(15から25)を持ち、かつメス属性を持った実体を過激に痴漢するメソッドです!!!!
897デフォルトの名無しさんsage2007/07/12(木) 21:44:03
つまんねえこと書くなオッサン
898デフォルトの名無しさんsage2007/07/12(木) 21:58:04

(?:0+?)([1-9][0-9]*) → \1

じゃだめなん?
899デフォルトの名無しさんsage2007/07/12(木) 22:03:33
ミスった

^(?:0+)([1-9]+[0-9]*|0)

これでどうだろう
900デフォルトの名無しさんsage2007/07/12(木) 22:04:30
つかこれでいいのか

^0+([1-9]+[0-9]*|0)
901デフォルトの名無しさんsage2007/07/12(木) 23:01:59
>>872=874?
わざわざ試作までして頂いたようで申し訳ありません。

>>869-875
質問の趣旨は、要件にあった物ががあれば、ちょっと教えてもらえないか、
という事であって、プログラムを書いて欲しいとまでは思ってませんでした。
自分はスキルが低いので何もお返しができませんし(汗)

今後は、似たような悩みがありそうなサーバ系のスレででも、別のアプローチで
質問してみます。

レスして頂いた方々、ありがとうございました。
902861=868=901sage2007/07/12(木) 23:26:44
すみません自分のレス番つけてなかったです。
903デフォルトの名無しさんsage2007/07/13(金) 08:35:24
>>900
gsubという置換メソッドを見つけましたが、その方法だと>>892のやり方でも
いけました。
どもです。
904デフォルトの名無しさんsage2007/07/13(金) 19:08:46
AAAAAA/BCD→AAAAAA
BGD/HJL→BGD
/より後ろの文字列を置換で削除(/も含む)したいのですがどういう表記にすればいいんでしょうか?
905デフォルトの名無しさんsage2007/07/13(金) 19:32:02
>>904

(.*?)/.* を \1 に置換

処理系によっては / は \/ にエスケープ。
906デフォルトの名無しさんsage2007/07/13(金) 19:46:58
>>905
即レスありがとうございます、置換できました
907デフォルトの名無しさんsage2007/07/13(金) 20:28:46
/.*を空文字置換ではいかんの?
908デフォルトの名無しさんsage2007/07/13(金) 21:27:50
普通はそうなる罠
909デフォルトの名無しさんsage2007/07/14(土) 21:38:25
>>901
作った。
自分のブログに上げたから、ブログ検索で見つけてくれ。
910デフォルトの名無しさんsage2007/07/15(日) 00:12:39
質問です
「切れる」「切れた」「切れす」「切れてん」「切れ、」にヒットして「切れ〜レス」にヒットしないような正規表現を作ろうと思い、

(?=.*切れ)((?=.*る)|(?=.*た)|(?=.*す)|(?=.*てん)|(?=.*、))^(?!.*レス).*

というのを作ったのですが、これだと「切れ〜〜、」というものまでヒットしてしまって困っています。
「切れ〜〜、」にヒットせずに、「切れ、」にヒットするようにはどうすれば良いのでしょうか?
よろしくお願いします。
911デフォルトの名無しさんsage2007/07/15(日) 00:40:48
lex的にやればできる。awkでもできそうだが。

"切れ([るたす、]|てん)" { printf("hit"); }
"切れ.*レス" { /* ignore */ }
. { /* ignore */ }
912デフォルトの名無しさん2007/07/15(日) 01:11:22
なんでlex?
普通に

切れ(る|た|す|(てん)|、)

でいいだろ。
913デフォルトの名無しさんsage2007/07/15(日) 01:13:42
切れ([るたす、]|(てん))
のほうがいいか。
914デフォルトの名無しさんsage2007/07/15(日) 01:16:52
>>912

それだと 「切れるレス」 が問題になる
915デフォルトの名無しさんsage2007/07/15(日) 02:03:08
「切れ〜レス」だけは駄目ってこと?

「切れるレ」とかは?
916デフォルトの名無しさんsage2007/07/15(日) 02:50:06
自分のWindowsアプリに正規表現を組み込もうと思っていますが、どの既存のエンジンが
みなさんのお勧めでしょうか??安定して、日本語を正しく処理できるエンジンがいいです。
917・∀・)っ-○◎●sage2007/07/15(日) 03:12:06
よく見るのはBREGEXP.DLL
最近は鬼車じゃないの。

あとはライセンスじゃね?
GPLな正規表現ライブラリ薦められて何も知らずに採用しちゃって・・・
なんてことがあっても誰も責任はとれんよ。
918デフォルトの名無しさんsage2007/07/15(日) 03:13:52
>>916
文字コードは?Unicode, Shift_JIS?
919・∀・)っ-○◎●sage2007/07/15(日) 03:20:30
Boostの文字列操作ライブラリはshift-jisと相性良くないからな。
自分でトークンイテレータを作りこむ人にはアリな選択
920デフォルトの名無しさんsage2007/07/15(日) 03:25:31
文字コードはUnicodeでお願いします。Windowsの内部形式と同じUTF-16LEで。
BREGEXPか鬼車ですか。わかりました。調べてみます。
921デフォルトの名無しさんsage2007/07/15(日) 03:39:48
Unicodeなら、Bregexp.dllは使えないな。鬼車かBoostかな?
鬼車は置換処理は自分で書かないといけないので注意。

あとは、Bregexp互換で中身は鬼車のbregonig.dllってものもあるけど、
ベータ版のUnicode対応版が出てる。置換もあるけど、まー、ベータ版だから様子見かな。
922デフォルトの名無しさんsage2007/07/15(日) 06:32:38
>>915
「切れるレス」にヒットしなければいいです。

専ブラJaneのあぼーんで使いたいので、perl互換で作りたいのです。
>>910の正規表現だと、「切れ、」と「切れ〜〜、」のどちらにもヒットしていしまい、この2つを区別したいのです。
例えば「切れないし、」は残したい場合でも、「切れ」と「、」が含まれるのでヒットしてしまうのです。

どうすれば解決できるのでしょうか?よろしくお願いします。
923922sage2007/07/15(日) 06:48:52
書き忘れました。
情報小出しにしてすいませんでした。
924デフォルトの名無しさんsage2007/07/15(日) 06:55:11
しね
925デフォルトの名無しさんsage2007/07/15(日) 13:17:40
UTF-8 なら PCRE でも良くね?
926・∀・)っ-○◎●sage2007/07/15(日) 13:54:29
単純な文字列マッチの性能は鬼車>PCRE

文字列固定の部分をBoyer-Moore法使って高速化してるからな。
Xpressiveもそうだっけな
927デフォルトの名無しさんsage2007/07/15(日) 14:23:29
>>922
手元に環境無いから試せないが

/切れ([るたす、]|(てん))(?!レス)/

では、どうか?
928デフォルトの名無しさんsage2007/07/15(日) 19:49:29
>>927
だめでした。
「切れ、」と「切れ〜〜、」は解決できているのですが、「切れるレス」にもヒットしてしまいました。
929デフォルトの名無しさんsage2007/07/15(日) 20:11:02
正規表現はxxを含まないというのを書くのに向いてないのに
なぜ無謀にもやろうとする奴が後をたたないのだろうか...
930デフォルトの名無しさんsage2007/07/15(日) 20:18:39
NOT ○○を含む
で実現すればいいのにねぇ
931デフォルトの名無しさんsage2007/07/15(日) 21:00:59
そうは言っても、ソフトがそれに対応していないとどうにもならんわけで。
(Janeはどうか知らんが)
932デフォルトの名無しさんsage2007/07/15(日) 22:44:49
>>928
そもそも Jane の正規表現って、Perl 互換なの?
あと、日本語をちゃんとサポートしてるのか?

Jane で使える正規表現を説明しているページ Plz
933デフォルトの名無しさんsage2007/07/15(日) 23:38:25
素朴な疑問だけど、正規表現に否定がないのはなぜ?

!(正規表現) で(正規表現)にまっちしない文字列、みたいのが
あってもよさそうなものじゃないかと思うのですが
934デフォルトの名無しさんsage2007/07/15(日) 23:54:22
>>932
JaneView.txtに
▼01101-040210RC1
▽正規検索ユニットを変更
 ・これまで使っていたRegExpRから、Windows/IE付属のRegExpオブジェクトに変更
 ・文法はPerl5互換(これまでと同じ)
 ・パフォーマンスは純粋な検索部分の速度で約2〜3倍に向上
 ・以前のユニットに戻すには、「設定」「設定」「その他」の「正規検索にWSHを使う」
  をオフにして再起動
 ・環境の問題でWSHが使えない場合は、初回起動時に警告ダイアログが出て自動でオフに
  設定されます(その場合、チェックボックスはグレーアウトされる)
  ※WSHで問題の報告がなければ、いずれRegExpRを取り除く予定です。
とありました。
日本語は使えてます。
935デフォルトの名無しさんsage2007/07/16(月) 00:01:42
>>933
まいっちんぐしない文字列を痴漢するときはどうするんだい?
936デフォルトの名無しさんsage2007/07/16(月) 00:18:35
というか、1文字の入力から状態遷移を繰り返してるから
入力から遷移先が決まらないものはダメなんじゃねえの
937デフォルトの名無しさんsage2007/07/16(月) 00:38:03
[^hoge]
938デフォルトの名無しさんsage2007/07/16(月) 00:38:19
正規言語の補集合も正規言語だから、!(正規表現)みたいのが
なくても書けるので不要ということだろうな。でも与えられた
正規表現が受理する言語の補集合を受理する正規表現を書くのは
大変なので、そういうシンタックスシュガーがあれば便利かも?


939デフォルトの名無しさんsage2007/07/16(月) 00:47:15
grep -v 'regexp'
940デフォルトの名無しさんsage2007/07/16(月) 00:52:00
>>938
意味がわかりません。
941デフォルトの名無しさんsage2007/07/16(月) 00:58:26
>>940
自分の無知を偉そうに自慢されても私たちに出来る事は何も有りません
942デフォルトの名無しさんsage2007/07/16(月) 01:03:39
>>934
確かに

> ・文法はPerl5互換(これまでと同じ)

って書いてあるけど

> Windows/IE付属のRegExpオブジェクトに変更
> ・環境の問題でWSHが使えない場合は

とも書いてあるので、細かいところまで Perl 互換かはちょっと怪しいな。

とりあえず
http://tehen.hp.infoseek.co.jp/abone/abone.html
によると、

/切れ([るたす、]|(てん))[^レ][^ス]/

あたりは動きそう。

(行末とかが "切れる" とかなってるとちょっと不味いかも...。)
943デフォルトの名無しさんsage2007/07/16(月) 01:10:31
>>941
小難しい単語並べりゃいいってもんじゃないんだよ。

>正規言語の補集合も正規言語だから、!(正規表現)みたいのが
>なくても書けるので不要ということだろうな。

書いてみろ。

この作業が酷く大変なら、そういうシンタクスシュガーが無い理由もわかるだろ。
944デフォルトの名無しさんsage2007/07/16(月) 01:29:25
なんちゅう詭弁
945デフォルトの名無しさんsage2007/07/16(月) 01:29:33
>>943
特定文字列が含まれてるかどうか調べるなら
if( $pero =~ /kari/ ){print "バーロー\n";}

含まれていないことを調べるならその補集合で
if( !($pero =~ /kari/) ){print "ローバー\n";}

ってことを言っただけでしょ?
これだけじゃ超えられない表現もいっぱあるけどさ
946・∀・)っ-○◎●sage2007/07/16(月) 03:13:12
クイックハックでパターンの先頭に1個「!」があれば否定にするようにしたことあったな。
実現方法は後察しの通り。
947デフォルトの名無しさんsage2007/07/16(月) 06:55:18
if( $pero !~ /kari/ ){print "バーロー\n";}
948デフォルトの名無しさんsage2007/07/16(月) 07:19:42
団子って何歳?
949デフォルトの名無しさんsage2007/07/16(月) 09:26:50
たしか40代だったな
950・∀・)っ-○◎●sage2007/07/16(月) 15:21:25
永遠の12歳だお
951デフォルトの名無しさんsage2007/07/16(月) 22:51:37
36進法で。
952◆OlivettiFg ここまで縦読みした2007/07/17(火) 23:14:00
>>950
人間のトシに換算すると(ry
953・∀・)っ-○◎●sage2007/07/17(火) 23:22:46
縦読み厨うざい
954デフォルトの名無しさんsage2007/07/19(木) 00:36:58
print "バーロー\n" unless( $pero =~ /kari/ );
 215KB (221046Byte)
dummy_for_searchRef

DAT2HTML 0.32g Converted.