正規表現

このエントリーをはてなブックマークに追加
語ろうぜ。
2みき(^-^) ◆MIKIDyAWSg :03/08/29 19:21
2げっと
UNIX板にもWebプログラミング板にもあるというのに、
さらにまだスレを立てるのか。
とりあえず
*
ワイルドカード。
正規表現道場とか、どっかになかったっけ?
まだじぇんじぇんわからん
正規表現ライブラリを作成するスレッドはここですか?
[ ]
中のものどれかとマッチ。
(i)



マソコ
>>4
それは正規表現じゃないだろ
[1-9]?[0-9]+
オートマトンっておいしそう
マトンってところがおいしそうだよな
15デフォルトの名無しさん:03/09/06 20:07
>>7
つくろー!!
  ,,,,,,, _
/''''  '';::.
l ≡   );;;:   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
≧〒≦  :;/)  | ツマラン!!
iー/ i ー'  k.l <  おまいの話は
l ノ‐ヘ   iJ   |   ツマラン!!
U乞 し ノ     \_______
`ー ‐
17デフォルトの名無しさん:03/09/06 21:06
Javaのクラス名

(([a-z]+\.([a-z]+\.)*)?([A-Z][a-z]*)+)
数字。
19デフォルトの名無しさん:03/09/06 22:26
規約に従っておれば数字など飾りです。偉いひとにはそれがわからんのです。
>17
redundant
1+ = 11*
22デフォルトの名無しさん:03/09/07 12:42
>>20 kouka?
(([a-z]+\.)*([A-Z][a-z]*)+)
>22
([a-z]+\.)*[A-Z][a-zA-Z]*

数字やアンダスコアは除いてな。
正規表現の検索ロジックってどうやって作ってるんだろう。
字句解析して細かく検索してるのかな?
>>24
単純な方法は、オートマトンを作ってただぐるぐる回すだけ。
>>25
O(n^2) ほど掛かりそうだな…
>>26
いや、検索対象文字列 n,オートマトン m として O(mn) か
これでも微妙に違うが…
28デフォルトの名無しさん:03/09/08 09:16
>>26-27 ?

たとえば abcd は
0 aなら goto 1 else goto 0
1 bなら goto 2 else goto 0
2 cなら goto 3 else goto 0
3 dなら Found else goto 0

てなオートマトンになるわけで  これは O(n) でしょ?
29デフォルトの名無しさん:03/09/08 10:17
"aaaaaaaaaaaaaaaaaaaaaaaaa" =~ /(a+)+b/
>>28
正規表現は途中からのマッチでもいいと思っていた…
>>28
検索対象文字列の長さとオートマトンの状態数の双方に依存するはずだから
O(n) はないと思うが…
>>31 ?
オートマトンってどんな実装を考えてるのよ?
普通に実装すれば、状態数がどうであれ 比較量は1だ
>>32
"aaaaaaaaaaaaaaaaaab" ~= /aaaab/
これのマッチはどうなる?
>>33 どうなるって・・・もしかしてやった事なくてゴチャゴチャ言ってるのか?

0 aなら goto 1 else goto 0
1 aなら goto 2 else goto 0
2 aなら goto 3 else goto 0
3 aなら goto 4 else goto 0
4 aなら goto 4 bなら Found else goto 0

4はこう書けば2つの判断が必要に見えるけど オートマトンなんだから表引で1アクションね
>>34
バックトラックって知ってますか?
>>34
aaaaab はマッチしますか?
>>35
 どうして、そういう質問を私になさるのでしょうか? 何か話しの流れに関係しますか?

>>36
 出来るだけ平易な表現したつもりなんで、追いかけてみれば判ると思うが?

aaaaの段階で 状態4にあり次の a でも状態4、その後のbで終了
38デフォルトの名無しさん:03/09/08 15:28
>>37
一口にオートマトンつっても、NFAとDFAがあるわけで、NFAならバックトラックが必要。
だから、NFAしか知らない奴とDFAしか知らない奴の会話が食い違ってる。

ここの話の流れで「バックトラックって知ってますか?」って聞く奴はNFAしか知らない初心者。
「オートマトンなら1アクションだ」って言い張る奴はNFAを知らない頭でっかち。
39デフォルトの名無しさん:03/09/08 15:32
ちなみに、前方参照を使うような高度な正規表現の場合、DFAでは実装が不可能。
従って、現在の主流は1アクションで済むDFAではなく、バックトラックを使うNFAの方だ。
DFAマンセーな奴は知識が古すぎるね。
ほら、あれだろ?Cマガの教科書読んだんだろ?
俺も持ってたよ。
>>39
×前方参照を使うような高度な正規表現の場合、DFAでは実装が不可能
○前方参照を使う正規表現の場合、DFAでは構成しなおさなければならなくなる


それから >>31 >>27 に対して説明を書いていたのだが、横から入ったなら説明してあげて下さい。
NFAだろうがDFAだろうが、状態数によって検索時間は増えない事を判り易くね。
NFAなら遷移数により増える事もね
safety and liveness
421 ◆cszrIBzBL2 :03/09/09 01:30
性器表現 ウプッ 俺最高!
43デフォルトの名無しさん:03/09/09 09:16
>>40
どうやってもDFAでは表現できない前方参照が存在する。
NFAならバックトラックが必要なので、検索時間は増える。
勉強しなおしてください。
>>43
前方参照でもその時点でDFAを動的に作成すればいいじゃないか。
それはDFAと呼ばないというなら、それでいいけどね。

そんなに用語に拘るなら、NFAという表現でバックトラックを使わない実装もある事もご説明頂いた方がよろしいのでは?
45デフォルトの名無しさん:03/09/09 11:03
>>44
DFAというのは入力に対して遷移先が一つに決まるため、高速な
検索ができるのが特徴。しかし、前方参照の場合、入力が決まらないと
遷移先も決まらないので、DFAではどうしても実現できない場合がある。
入力に従って動的に作成されるオートマトンというのは、入力に従って
遷移先が決まるオートマトンと同じ働きしかしない上、作成のオーバー
ヘッドにより、作成済みのNFAより必ず遅くなる。
もちろん、そんなものをDFAとは呼ばない。

NFAでバックトラックを使わない実装ももちろんあるが、バックトラックを
使ったほうがパフォーマンスが良くなるのに、わざわざそんなものを使う
意味は無いし、バックトラックよりパフォーマンスが悪くなる以上、
「オートマトンなら1アクションだ」とますます言えないことはバカにでも
わかるだろう。
わからなければ勉強しなおしてください。
オートマトンなら1アクション という部分だけをそういうふうに解釈した上非難されるのは心外というか、
何をそんなに的外れな事を言って威張り散らしてるの? って感じなんだが?

俺が書いたのはこうだよ

>4はこう書けば2つの判断が必要に見えるけど オートマトンなんだから表引で1アクションね

だいたい、バックトラックを使った方がパフォーマンスが常に良いなんて誰が言ってるんだ?
自分解釈をなさるのは結構だが、まるで常識のように発言すると笑われるよ。

47デフォルトの名無しさん:03/09/09 11:26
じゃあ、NFAを使ってどんな入力に対してもバックトラックを使わないで、
バックトラックよりもパフォーマンスが良くなるアルゴリズムを示してください。
48デフォルトの名無しさん:03/09/09 11:28
示せない場合、笑われるのがどっちなのかは、並の人間の知能が
あればすぐにわかるでしょう。
>>47
了解、

 じゃバックトラックが必要な 正規表現とそのNFAを 一つ書いて下さい。
 それをDFAに変換します。
50デフォルトの名無しさん:03/09/09 11:34
>>49
「どんな入力に対しても」という文字が読めませんか?
51デフォルトの名無しさん:03/09/09 11:35
それから、「アルゴリズム」という言葉は知ってますか?
まるで常識のように発言しましたが、アルゴリズムという言葉は
実際に常識なので、知らなければ勉強しなおしてください。
52デフォルトの名無しさん:03/09/09 11:37
それともまさか、各正規表現に対してチューンナップされたプログラムを
いちいち作るの?
53デフォルトの名無しさん:03/09/09 11:42
>>49
「NFAを使って」という文字も読めませんか?
>>50 どんな入力でもより、出来そうもないシンプルなのを一つおあげになった方がお互い納得出来るでしょ?
>>53
  NFA->DFA変換がルール違反とおっしゃるのですか?
 DFAならお互いにバックトラックが必要ないことを了解出来てるわけで
 NFA->DFAに変換出来る事をもってバックトラックを使わずに可能だと簡単に証明出来るでしょ?
こういう複雑な議論の末の成果物に支えられている、
へたれプログラムのわたし。
お茶出すフリくらいしかできません ノ⌒旦~
おいおい、
>NFA->DFAに変換出来る
ってそれは数学的に証明されてるじゃないか
>>46
「バックトラックを使わない方が常によい」あるいは
「バックトラックを使わないが常にパフォーマンスの優れたものが作れる」
とは言ってないと思うけど。
>>47 は日本語を勉強してください。
581 ◆cszrIBzBL2 :03/09/09 13:13
おはよう

いや昨日さ、朝方までネッツムービー見てたのよ
なので、今起きたんだよ
ネッツムービーっつっても、既存のメディアをネットで見たので
正式にはネッツムービーとは言わないのだが・・・
もちろんそこまでして見たいムービーはガンダムに決まってる
0083をとりあえず見ている今から8話目以降を見る
まあ視聴時間は一週間あり、何度見ても料金変わらないので(1話100円)
みんなにも見て欲しい。(IDとパスワードは以下参照)
まあ、楽しんでくれ 感想待ってるからな じゃあな

ユーザID:SuK8V6dq9aJLdarZ6amX
パスワード:********************
59デフォルトの名無しさん:03/09/09 18:25
>>56
おいおい、前方参照って言葉を知ってるか?
60デフォルトの名無しさん:03/09/09 18:25
できるできないでなしに、効率が悪いって話だよ。
>>59
知らんな。 \1 とかの後方参照とは違うのか? 

>>60
どこから効率の話になったんだ? オーダーの話じゃなかったのか?

それでその前方参照ならオーダーは幾らになるんだ? 
NFAとかDFAとか何のことかと思ったら…
非決定性有限オートマトンと決定性有限オートマトンのことか
もっと分かりやすく説明しる
>>62
おいおい。
64デフォルトの名無しさん:03/09/11 14:04
オートマトンと形式言語について理論的に学ぶにはどんな本がいいですか?
英語・日本語どちらでもいいです。よろしくお願いします。
65デフォルトの名無しさん:03/09/11 16:33
>>57
おいおい、マジで正規表現の一つ一つにプログラムを書くつもりか?
ユーザーが自由に正規表現を入力できなきゃ意味無いだろ。
>>65
レス先と噛みあっていないようだけど

ユーザが正規表現を与えてからコード(色んなレベルがあるけど)を作り出すのも普通の実装法では?
>66
lexがそうだな。
DFAを作っているはず。
68デフォルトの名無しさん:03/09/11 18:26
>>66
おいおい、よくわかってないなら口を出すなよ。
ユーザーが正規表現を与えてからコード(オートマトン)を作り出すことを
「前提に」話をしてんだよ。
お前の言ってるレベルよりもっと先のレベルで話をしてんの。

そのオートマトンの作成方法について、自動的に作成されるのが普通だが、
正規表現ごとに人間がハードコーディングすると、最高のパフォーマンスを
得ることができる。が、そんなものはたとえパフォーマンスが高くても使い物には
ならん。

もともとの話は、バックトラックもDFAも使わずに、バックトラックを使ったNFAよりも
パフォーマンスがよくてなおかつ前方参照が問題なく使えるアルゴリズムを示せと言った
ところ、「俺が一つ一つ変換してやるからアルゴリズムは示す必要は無い」と言う奴が
出てきたんだよ。

違うか?
違うならアルゴリズムをちゃんと示せよ。
もう一度言っておくが、「アルゴリズム」は常識語だ。
>>68
なんか、どんどん話を勝手に創作してるように他人には思えるのだが?
一度自己チェックしてみたほうがいいよ。
見返しても
>>46
>だいたい、バックトラックを使った方がパフォーマンスが常に良いなんて誰が言ってるんだ?
>自分解釈をなさるのは結構だが、まるで常識のように発言すると笑われるよ。

>>49
>じゃバックトラックが必要な 正規表現とそのNFAを 一つ書いて下さい。
>それをDFAに変換します。

という奴しかいないぞ。
反例一つあげて、納得させたらいいじゃないか?

たとえば、\(a*b\)\1c のNFAを書いて、DFAに直らなかったら それで納得するんじゃないの?
ああ、*を使うのは意地悪だな . 程度にしとくべきか
>>70
ところで
> \(a*b\)\1c
みたいに\1とか使ってる正規表現って
「有限オートマトン⇔正規表現」における正規表現といえるのだろうか?
「有限オートマトン⇔正規表現」の数学的正規表現 を正規表現の範囲としてしまうと
「NFA⇔DFA」というのは証明されているし、実装法もわかっている。
後方参照 をDFAでどう表現するかは面白い話題じゃないか

ところで、前方参照は何の事なんだろ?
backreferenceを後方参照と訳す奴と前方参照と訳す奴の2種類がいる。
話が通じなくて困る。
ここでのbackって戻るって意味だよな
前に戻る
後ろに戻る
うーん…
forwardが前方なんだからbackwardが後方に決まっている。前方は前進する方向だ。
と俺は思っているよ。
前方参照って言うと、Perlで言うところの (?= ) とかが思い浮かぶ。
んんん?あれは前方参照って呼んだっけ?
>>76
どっちが前でどっちが後ろなんてのは個人差があるんだよな
例えば"abcde"という文字列があったとして

"a"は先に出た文字だから前だ
"a"は過去に出た文字だから後ろだ

どちらも正解だと思う
>>77
まったくの正論。同意
「前日」って言葉はあるけど
「後日」って言葉はないな。
8079:03/09/13 18:21
書き込んだ直後に「後日」って言葉があるのに気づいた。
でも「前日」とは真逆の言葉だ。
>>80
それは、言葉の意味がちゃんと確定されている状況のひとつに過ぎないわけだ。
他には、人間の向いている方向は、眼前・背後のように、前後が決まっていたり。

↓ 閑話休題でたのむ
82デフォルトの名無しさん:03/09/14 11:03
後方参照 をDFAだけど

簡単な後方参照 \(a.b\)\1 とかは 直感DFAに出来そうに思う。
. の部分にマッチした変数とすればという事だけど

これをDFAの範囲内でないという事なら そもそも 後方参照は正規表現の範囲内かという事になるし
>>82
> これをDFAの範囲内でないという事なら そもそも 後方参照は正規表現の範囲内かという事になるし

>>72-73
84デフォルトの名無しさん:03/09/14 11:49
>>83
「簡単な」だけサポートしてもだめ。
85デフォルトの名無しさん:03/09/14 11:52
>>84
どういうのが難しそうというか出来ないと思うわけ?
86デフォルトの名無しさん:03/09/14 12:01
どんな入力に対してもできなきゃだめ。
だから、一つ一つ「これならできる」「これならできない」じゃなく、
全てに対応できるアルゴリズムを示せと何度も言っておる。
ユーザーが正規表現を入力してからプログラミングするのは泥縄と言う。
87デフォルトの名無しさん:03/09/14 12:04
それから、「マッチした変数」とか言うのが出てくる時点でDFAではない。
入力に従って遷移先が一意に決まるのがDFAであり、柔軟に変更されるのはNFAだ。
とりあえず、どうしても例を示さなきゃ何もできないというなら、
せめて>>82の正規表現を汎用的なアルゴリズムでDFAに変換してから大きな口をたたけ。
88デフォルトの名無しさん:03/09/14 12:48
たとえば、状態@から入力"a"によって状態Aに遷移し、また同じく
変数Aによって状態Bに遷移するとする。
このとき、A=="a"ならば、入力"a"によって遷移する先がAとBの二つになり、
一意に定まらない。
これはNFAであり、DFAではない。
よって、変数を使ってDFAに変換することはできない。

動的にDFAを構築するという方法を言った奴もいたが、動的にツリーを
構築するよりは、構築されたツリーから動的に遷移する方がはるかに早い。
よって、DFAよりはNFAの方がパフォーマンスが良い場合がある。

従って、もともとの話に戻るなら、オートマトンによって必ずワンアクションで
遷移先が決まると勘違いしているのは、NFAを知らない奴だ。

知らないだけでなく、これだけウダウダと恥をさらし続けてるというのは、
まったくもってあきれ返るね。
>>88
もっと仮想コードは判り易く書いてくれよ。

状態@ 入力="a" then 状態A else 状態@
状態A 入力=@A then 状態B else 状態A
状態B ここは何?終端?


プッシュダウンオートマトンを使えってこった
それから元の正規表現も書いてくれないとダメだ。

まるで総合失調症患者の書き方みたいに判らんというか説明不足だぞ。
92デフォルトの名無しさん:03/09/14 14:18
わからんのは頭が悪いからだよ。
変数を使ったDFAなどないことの説明だ。
93デフォルトの名無しさん:03/09/14 14:19
つーか、そのくらい説明されなくてもわかってなきゃいけないことなんだよ。
94デフォルトの名無しさん:03/09/14 14:20
早く前方参照を使った正規表現をDFAに変換するアルゴリズムを書いてくれよ。
無理だがな(藁
95デフォルトの名無しさん:03/09/14 14:21
>>88を要約してやろう。
よって、変数を使ってDFAに変換することはできない。
オートマトンによって必ずワンアクションで 遷移先が決まると
勘違いしているのは、NFAを知らない奴だ。
まったくもってあきれ返るね。
96デフォルトの名無しさん:03/09/14 14:22
どうだ、これなら頭悪くても読解できるか?(藁
97デフォルトの名無しさん:03/09/14 14:31
遷移先が終端であるとか無いとか、元の正規表現がどうとか、
そんなことは全く関係が無い。
DFAというのは遷移先が一意に決まるからこそ「決定性」オートマトンという
名前がつけられているのであって、同じ入力"a"にたいして二つの遷移先が
できることにより、それはDFAでなくなる。
よって、変数を使ってDFAに変換することはできない。

これだけ初心者向けに書いてもまだわかんねーかな?
VB厨房はIFとTHENを使えばわかるのか?(藁
98デフォルトの名無しさん:03/09/16 16:18
\(a.b\)\1

間違っているかもしれないが、

まず、a.b のオートマトンは
状態0 aなら goto 1 else goto 0
状態1 aなら goto 3 else goto 2
状態2 bなら Found1 else goto 0
状態3 bなら Found2 else goto 1

どうして状態1でaを特別にするかというのは、たとえば "aacb" を考えれば分かる

\1 のマッチは aと2文字目とcにマッチすればよいから、この検索に継続して
Found1 aなら goto 4 else goto 0
状態4 状態1で読んだ値と同じなら goto 5 else goto 0
状態5 cなら Found3 else goto 0
"aac"とマッチした場合は状態1に戻らなければいけないので
Found2 aなら goto 6 else goto 1
状態6 aなら goto 7 else goto 1
状態7 cなら found4 else goto 1
99デフォルトの名無しさん:03/09/16 18:22
aacbが\(a.b\)\1にマッチすると本気で思ってるの?
100デフォルトの名無しさん:03/09/16 18:35
>>99
a.bの部分だから>>98でいいんだよ。
>>98
で、それを人間が変換しなきゃならないのはバカバカしいから、変換する
アルゴリズムを示せと何度も言ってるはずだがね。
今回は「.」が一つだから、ノードを一つ取り替えれば済む。
すなわち、状態4のことだ。
が、もっと複雑な正規表現の場合、ツリーの再構築が必要になる。
ツリーを再構築するよりはバックトラックのほうが効率が良い。

おい、何度同じ事を言わせる気だ?
101デフォルトの名無しさん:03/09/16 20:02
ああ、もう一つ同じ事を言っておくが、アルゴリズムは常識語だ。
知らなければ勉強しなおしてください。
くれぐれもプログラムあるいはコードと間違えないように。
>>101
誰にいってるの?
10398:03/09/16 20:23
状態5/状態7 のc は bの間違いです。
ええと、数学の話で済むところをごちゃごちゃにしちゃうのがいけないと思うのですが。

狭義の正規表現 ⇔ 狭義のNFA ⇔ DFA は数学的に証明済みなのだから、
参照を含む正規表現が、狭義の正規表現に変換可能ならば、コードを示す必要もなし。
逆に狭義の正規表現のクラスからはみ出るなら、バックトラックNFAもはみ出るし、DFAでは実現不可能。
ただし、DFAを拡張することで効率がよいものができるかどうかは、問題に入ってない。

ってことで、いかがでしょうか。
性器表現も教えてください
数学的には NFA ⇔ DFA である事は証明されている。
元が数学的正規表現であるかどうかに関わらず NFAであるならDFAに変換出来る。
ただ、どう実装するかという問題だけだ。
普通にやれば爆発的な規模になるからね。
107デフォルトの名無しさん:03/09/18 12:27
>>106
その論文は前方参照・後方参照について言及されてない。
だから、ここで論じられてる事に関しては証明されてない。
>>107
ちゃんと>>106を読んでみ

まず
>数学的には NFA ⇔ DFA である事は証明されている。
>元が数学的正規表現であるかどうかに関わらず NFAであるならDFAに変換出来る。
は事実だ

次に
> その論文は前方参照・後方参照について言及されてない。
前方参照・後方参照を含む正規表現は数学的な正規表現ではない
ここで問題になるのは
前方参照・後方参照を含む正規表現がNFAで表せるか,だ
NFAで表せれば,自動的にDFAに変換できる
109デフォルトの名無しさん:03/09/18 17:55
>>108
最初から前方参照・後方参照を使った場合の話をしてんのに、まるで関係ない
論文を持ってきて「証明されてまーす」「この論文は事実でーす」
なんて、頭悪いにも程がある。
一度言いたい事を整理してみたら?
それが出来なくて、しかも自分が変だと思わないなら、自分は総合失調の可能性があると思った方がいいよ。

言いたいことが、「俺はスゲーんだ」なのだとすれば、それはそれで確かにあんたはスゲーよと認めるけどね。
>>109
だからちゃんと>>106>>108を読めよ
頭悪いにも程がある

>>110
リダイレクタ付けてくれ
誰に向かって言ってるのか分からない
>>109
お前は三段論法とか演繹を知らないのか、と
せっかく皆が有効な議論をしようとしてるのに、一人で潰しちゃってる奴がいるな
がっかり・・・
そう >>108 の言う通り

>>107は NFAでDFAに変換出来ないという物を1品だけ示せばそれですむんだから、なんでそうしないんだ?

それはたぶん普通のNFAではないのだろうけど、どういうふうな拡張がされていて
どこがDFAに変換出来ない(あるいは難しいのか)がそれで明らかになるだろう。
115デフォルトの名無しさん:03/09/20 15:37
まだ頭悪い奴が騒いでるな(藁
前方参照・後方参照の無い正規表現の話は的外れだからやめてね。
みんなもっと高度な話をしてるんだよ。
116デフォルトの名無しさん:03/09/20 15:38
何度も言うが、これだけ分かりやすく書いてるのにわかんないのは、
自分理解力が不足してるんだって気づきなさい。
ほら、わかんないって騒いでるのはお前だけだろ?
117判らん人1:03/09/20 15:42
はい わかんないです。
118デフォルトの名無しさん:03/09/20 16:07
ほら、お前だけだ(藁
名無しの掲示板で特定個人と会話しようと試みてる馬鹿が調子に乗ってるスレはここですか。
あれは馬鹿じゃないでしょ。 キティでしょ。 
>>116
ヘンテコリンな粘着を延々と、そろそろ自分がキティだって事にて気づきなさい。

そもそも、自分頭良いと思うのなら>>114に答えるのも簡単でしょ?
たった一つの例をクールに示せばよいのだからね。

それが出来ないなら、それが妄想って事だよ。
122デフォルトの名無しさん:03/09/20 16:49
例を出すまでも無いことをこれだけ丁寧に説明してもわかんないバカに
果たして一つの例で理解できるかな?
123デフォルトの名無しさん:03/09/20 16:52
秀丸の正規表現って[]とか使えない?
今さら正規表現のアルゴリズムを云々言ってるやつは暇なのかね。
ライブラリが腐るほど公開されてるんだから、黙って使ってればいいのに。
>>124
ここで正規表現のアルゴリズムを云々言ってるやつらが公開してるライブラリなんだから、
黙って議論を見守ってればいいのに。
>>124
便利(高機能・高速化)にするために、正規表現に関する知識はまだまだ足りない。
ソフトウエアや数学の学会でも、正規表現に関する論文発表は多い。
エディタとか作ってる人って正規表現のエンジンとか一から自分で実装してんのかな?
>>127
自分で実装派と利用派が当然いるでしょうね。
ただ、やっぱりPerl互換でとかいう事になると、実装派の負担は大きくて厳しい
C++のSTLなどと同じ。
利用できそうならするが、速度や機能を考えて自分で実装することもある。
130教えて君:03/09/24 23:22
皆様の足元にも及ばない、まるで教えて君で申し訳ないのですが
パスワードの設定に関して妥当性を正規表現で評価する方法を探しています。
もし皆様のなかで優れた方法をご存知でしたら、教えてください。
VBSで評価しようとしています。(お恥ずかしい話です)
条件は色々あると思いますが、私が想定しているのは
-8文字以上
-14文字以下
-アルファベット(大文字小文字)どこにあってもよく各1文字以上
-数字 どこにあってもよく各1文字以上
で作られていることです。
/.{8,14}/ && /[A-Z]/ && /[a-z]/ && [0-9]/
ってこと?
/\w{8,14}/
133デフォルトの名無しさん:03/09/25 01:43
オートマトンはおいしいですか?
マトンカレーはおいしいです。
>>133
マトンは何の肉か知っていますか?
135デフォルトの名無しさん:03/09/25 02:16
137デフォルトの名無しさん:03/09/27 12:52
>>130
正規表現一つで済まそうとするなら、次のものにマッチ「しない」ものが
条件を満たす。
^[^A-Z]+$|^[^a-z]+$|^[^0-9]+$|^.{,7}$|^.{15,}$
精液表現
JRE32.DLLでテキスト文を検索したいのですが
and検索がうまくいきません
and検索はどのように正規表現で表記すればいいのでしょうか?

例えば「a and b」を検索したい場合
(.*a.*)(.*b.*)で検索すると"abcde"はヒットするのですが、"edcba"はヒットしません
(?=.*a)(?=.*b)では何もヒットしません

文字数が多くなってしまうが
やっぱり(a.*b)|(b.*a)と表記しないと駄目なんでしょうか?
(これだと「a and b and c and d」で検索するにはすごい文字数に・・・)
(.*a.*)検索でヒットしたテキストだけに、次に(.*b.*)で検索するってな多段階方式はどうっすか?
単発でしたいなら、無順序で含んでいるものを検索するには>>139の思うとおりすごい正規表現書くしかないし。
141139:03/10/01 18:28
レスありがとうございます
多段階方式ですか、試して見たいと思います

しかし.NETのMatch関数なら(?=.*a)(?=.*b)でand検索できて順序に
関係なくヒットするのにJREはなんで出来ないんだろう?
AWKの正規表現しかサポートしてないのかな?
つーか、なんでいまさらJRE32.DLLなんか使ってんだ?
143デフォルトの名無しさん:03/10/01 19:53
>>139
^[^a]+$|^[^b]+$
上記にマッチ「しない」ものが条件を満たす。

おい、お前ら応用というものがきかんのか?
>>143
例では "a" とか "b" とか言ってるけど、ホントは文字列なんじゃないの?
>>139
 [ab]+
じゃだめなんか?

aやbが文字列なら
 [\(a\)\(b\)]+
とか
>>145
それは「a or b」
147139:03/10/02 10:23
>>143>>144>>145
レスありがとうございます
例としてa and bをあげましたが文字列も検索したいと思っています

.NETのMatch関数の検索よりもJREの検索時間の方が極端に早かったので
何とかJREを使いたいと思っているのですが・・
(大きいサイズのテキストファイルを検索したいので)
性 器 表 現
149148:03/10/03 22:56
正直スマンカッタ

>>147
or な検索はできるけど
>>139のような and な検索って正規表現ではできないんじゃないかな
なんかトリッキーな正規表現を記述すればできるかもしれないけど、
正規表現の正当な書式で and にあたるようなものは無いと思われ
>>139
先読み (?=…) をサポートしている正規表現ライブラリなんて、
それこそ、いくらでもあると思うが。たしか、Perl5のエンジンを
ぱくったやつとかもなかったっけ?
結局、and 部分の判定は別に行えばいいのではないかと。
>>140 の提案のように、
grep aaa | grep bbb | grep ccc | grep ddd
とするような
Ruby の eregex.rb には RegAnd, RegOr があるみたい
>>152
その中では結局 >>151 みたいなことしてるみたいだけどね。
154デフォルトの名無しさん:03/10/12 23:32
おまえら正規表現エンジンってつくったことありますか?
あるけどなにか?
ないけどなにか?
あいけどなにか?
なるけどなにか?
あなるけどおなにか?
携帯キャリアのメアドを評価する正規表現 くらさい・・・
>>160
まずは努力の跡を見せろや。
>>160
このアドレスはいいとか悪いとか評価するのか?
評価の基準は?
164デフォルトの名無しさん:03/11/02 22:49
>>161 >>162 のレスは一見、冷酷にみえる。しかし、この2ちゃんねるの姿
勢があるから、2ちゃんねるは他の掲示板に比べると、教えて君のアホな書
込みが比較的少ない。
これが2ちゃんねるの長所でもある。

>>160 が応答を返さない所をみると、正規表現を自分で理解しようとせずに
人に書いてもらって正規表現をそのままコピーして使うつもりだったか。

NTT DoCoMoのメールアドレスの仕様はよく知らない。一応、perlでの一案を
書いて見るけど間違っていると思う。

^[0-9a-z.]+@docomo\.ne\.jp$
>>164
×人に書いてもらって
○人に書いてもらった
166デフォルトの名無しさん:03/11/03 00:05
正規表現の NFA と DFA の違いをちゃんと理解している人って、何%くらいいるのかなあ?

理解してますか?>そこのあなた
違いは分かってると思うけど
NFAもDFAも詳細までは知らんから実装できん

DFAは入力に対し遷移先が一意に決まり
NFAは複数に遷移する先が複数になる

ってこと?
正規表現の 数学モデル と 前方参照を含む実装 の違いをちゃんと理解している人って、何%くらいいるのかなあ?

理解してますか?>そこのあなた
NFAは遷移先が複数。
複数ある状態の直積がDFA。
DFAは「NFAの状態」と「全て入力値」の集合演算の結果。
170デフォルトの名無しさん:03/11/03 15:48
純粋なDFAでは部分一致参照( ( ) を \数字 で参照)と、汎用量指定子({min,max})は
実装不可能と理解していいのでしょうか?
>>170
たとえば r{3,5} の場合、rrr(()|r)(()|r) などに展開すれば
ほぼ等価になる。
デンプシーロールの完成型について語れ。
173デフォルトの名無しさん:03/11/03 19:34
>>171
r{1,10000} はどう展開するの?
>>173
何で分からないの?頭が悪いの?
>>170
純粋なDFAでは部分一致参照( ( ) を \数字 で参照)は実装不可能
メールアドレスの@以降を返すにはどうしたらいいんでしょうか(;´Д⊂)
[email protected]→docomo.ne.jp みたいな感じ
@ で split すればいいじゃん
:g/.*@/s///g
>>178
 <(_ _*)> アリガトォ できますた(;´Д`A ```

>>177
 splitでやってましたが正規表現でいきたかった
180178:03/11/05 16:26
Σ(゚д゚|||) マジデ!!
>>180
エスパーの資質アリか?
PHPでHTMLファイルからタイトルのみ取り出すには
$result = ereg('<title>(.+)</title>', $str, $regs);
でOK?
<title>([^<]*)<\/title>
でいけました
184デフォルトの名無しさん:03/11/06 15:09
空行の正規表現を教えてください
>>184
せめてどの実装での質問かくらい書いても罰は当たらないと思うが?

%r#^$%#
186184:03/11/06 15:58
すみません。
perl です

空行(スペース含んでいたりいなかったり)を消したいときに
とある本で 空行でない行をprintする とヒントがあったのですが
空行でない行を探すのは 複数のパタンのor になる?
だったら直接 空行をあらわす 正規表現は無いのか?
と思ったのですが、分からなかったので質問しました
↑、分かりにくくてすみません。
>>186
print if /\S/; # 空白文字以外を含んでたらその行を print する
print unless /^\s*$/; # 空行か空白文字のみの行は print しない
ところで何で”正規”表現っていうの?
「アルゴリズムの設計と解析」だと「正則表現」と訳されてまつ
アルファベット A={a1,...,an} 上の正規表現とは
1. 空記号列 ε は正規表現である
2. ai(Aの任意の要素)は正規表現である
3. X と Y が正規表現ならば、
3-1. X|Y も正規表現である
3-2. XY も正規表現である
3-3. {X}* も正規表現である
http://www.example.com/foo/bar/fuga/hoge/
にアクセスされた場合、実際には
http://www.example.com/index.php?cat=hoge
にアクセスしてるように表示させたいと思っています。
(要は、com/以下の、途中のパス名はどうでもよく、URIの最後の/と/の間の文字列を受け取って
実際には、http://www.example.com/index.php?cat=その文字列
を表示させたく思ってます。)
で、Apacheのmod_rewriteモジュールなるものを使って、
RewriteRule ([^/]*)/?$ /index.php?cat=$1
としたら、うまくいきました。

ただ、そしたらこんどは、
http://www.example.com/phpMyAdmin/
みたいなものまでこれを解釈してしまうようになってしまいました・・
(そりゃそうだ)
で、たとえば「phpMyAdmin」「Analog」「xoops」の、
ディレクトリ配下の場合にアクセスされたときにだけ、
この「mod_rewrite」を無効にするには、どうすればいいのでしょうか?

正規表現で可能でしょうか?
そりゃできるだろ
ちっとは考えたのか?
193191:03/11/09 03:12
>>192
考えて、あと、正規表現メモをはじめとする各種サイトを見たり、「グループ化」でググったりしたのですが、
どうもうまくいきません。

とりあえず、
RewriteRule (phpMyAdmin)|(xoops)|([^/]*)/?$ /index.php?cat=$3
とやることで、
phpMyAdminとxoopsにひっかからない場合のみ、正常に動作するようには出来たのですが、
逆に引っかかるときに、記述の仕方(正規表現で分岐する書き方?)が分かりませんでした・・・。

最終的には、
-------------------------------------------------------------
「URIがhttp://www.example.com/phpMyAdmin配下
または
「URIがhttp://www.example.com/xoops配下
なら、mod_rewriteを行わず、
それ以外は、/index.php?cat=★
(★は、URLの最後の2つ/と/の間の文字列。ただし、1番最後の/はなくてもいい)
-------------------------------------------------------------
としたいのですが・・・

教えて頂ければ幸いです・・・
>>193
?!
(?!:)
196デフォルトの名無しさん:03/12/21 21:40
grepである文字列が含まない行を調べたいのですが
正規表現でどうやって書くんですか?
具体的に言うとアドレスの集合の中から
www.2ch.net
を含まないアドレスの検索をしたいということです
>>196
grep -v じゃダメなの?
>>196
“含まない”という正規表現はない。

grep の -v オプションでやりたいことはできる。
199デフォルトの名無しさん:03/12/21 21:47
grepだと-v オプションでできるみたいですね
正規表現だとやはり無いのでしょうか・・・
残念
簡単に書く方法はないけど頑張れば「理論的には」書けるよ。
相当長くて複雑になるだろうけど。
>>200
ほんと?

a,b,c,d,e というアルファベットに対して
"abc"を含まない文字列という「正規表現」が書けるのか?
それとも、これでも複雑すぎる?
>>201
>a,b,c,d,e というアルファベットで "abc" を含まない

やってみたら複雑すぎて大変だったので
a,b,c というアルファベットで "ab" を含まない正規表現で我慢して。((b|c)*a+c)*

アルファベットの集合を Σ とするとき
(拡張正規表現のない素の) 正規表現で表される文字列の集合 L に対して
Σ* - L も正規表現で表されることの証明はオートマトン関係の本でも参照。
((b|c)*a+c)*(b|c)*a* か
204201:03/12/22 00:02
>>202
納得。
自分でやってみたが、途中でめんどくさくなった。
オートマトンを書くまでは簡単なんだけど。
205質問:03/12/31 03:13
<center><img src="./aaaa/bbbb/残したい1.png"></center>
<center><img src="./aaaa/cc/残したい2.png"></center>

を置換を使って、
<center><img src="./eee//残したい1.png"></center>
<center><img src="./eee/残したい2.png"></center>
としたいのですが、可能でしょうか?
206質問:03/12/31 03:15
訂正
<center><img src="./eee//残したい1.png"></center>
でなくて

<center><img src="./eee/残したい1.png"></center>

でした
>>205
%s:"\./[^/]*/[^/]*/:"./eee/:g
208質問:03/12/31 15:54
>>207
亀レスで、すいませんでした。
ためしてみましたが、出来ませんでした。

申し訳ないんですが素人なので、置換前の条件と置換後の条件を併記で、お願います。
>>208
利用する言語をちゃんと書かないからそういう答えしか返ってこない。
210質問:04/01/01 00:28
>>209
はぁ、そうですか・・・すいません。
用途としては、サクラエディタ(メモ帳)使って、HTMLのpngを自分の指定したフォルダーに置き換えるのに使おうと思ってます。
言語については、よくわかりませんが、正規表現のところに
Bregexp.dll V1.1 Build 22 Apr 29 2000 21:13:19
と、書いてありました。

調べたところ(2ch内検索)ですが、意味が解からないです。
/*
非互換について
次の機能は、BREGEXP.DLLではサポートしていません。

●VBなどでパターンに変数名を書いても展開されません
●メタ文字
\G 前回の m//g が終わったところにのみマッチ
●修飾子(パターンの右側につけるパラメータ)
o 一度だけコンパイル
x 拡張正規表現を使用する
e 式の右側の評価を行なう

*/

これで、なんとかお願いします。
211デフォルトの名無しさん:04/01/02 20:57
GPLorLGPL的な正規表現ライブラリ
があれば紹介してください。

出来れば、高性能な奴
212デフォルトの名無しさん:04/01/02 21:12
strutsスレでvalidatorについて聞いた者です。
正規表現で日付チェックを行おうとしていますが、
yyyy/MM/ddとyyyyMMddを許可しようとした場合、
どのようにすればよいのでしょうか?
213memo:04/01/02 21:13
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板専用の
オフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
>>212
yyyy/?MM/?dd

なお、それが「日付」であるかは別の方法でチェックしましょう。
216デフォルトの名無しさん:04/01/02 21:58
>>215

本当にyyyyとか書くなんて
217デフォルトの名無しさん:04/01/02 22:11
『標準入力からテキストファイルを読み込み、単語を検出して辞書順に並べ、出現頻度を標準出力に出力しなさい。』
って宿題があるのですが分かる方お願いします。オートマトンとかそういうのを使っていたと思うのですが・・・ 
>>217

本当に宿題とか聞くなんて
>215

2003/1010
とかも とおっちゃうぜ
yyyy/MM/dd|yyyyMMdd
yyyy(/?)MM\1dd
yyyy(/MM/|MM)dd
223デフォルトの名無しさん:04/01/06 02:06
$date = "2003/12/31";
print "私は馬鹿でした" unless $date =~ m|yyyy/?MM/?dd|;
[0-9][0-9][0-9][0-9](/(1[0-2]|0[1-9])/|(1[0-2]|0[1-9]))(3[01]|[12][0-9]|0[1-9])
225デフォルトの名無しさん:04/01/06 15:10
「2バイト文字が含まれて"いない"」ってのはどう書いたらいい?
「〜含まれてる」でもいいんだけど。
2バイト文字って??
>>225
半角カナを考慮しないのなら[\x00-\x7f]でいいんじゃないの?
文字コードが何なのかもわからないのに?
229デフォルトの名無しさん:04/01/07 00:15
$_=<>;
if(/[\x00-\x7f]/){print"2バイト文字が含まれていない"}
文字コードが何なのかもわからないのに?
>>229
ISO-2022-JP
232デフォルトの名無しさん:04/01/07 22:02
>>227
文字列の中に1バイト文字 ([\x00-\x7f]) が含まれている
故に2バイト文字が含まれていない?
だれも相手してくれないし
>>233=知ったかぶりして覚えたての用語を使うだけの厨房
相手するだけ無駄
>>234
文字コードも知らない厨房。
大人の対応は、sjisと思ってあげることだろうか。
>>227
半角カナを考慮したとしても[\x00-\x7f]でいいよ。
何で半角カナを特別視するんだ?

1バイトかなならわからんでもないが。
>>236
Shift_JIS の場合だと半角カナは1バイト文字でかつ [\x00-\x7f] の外にあるから、じゃない?
238デフォルトの名無しさん:04/01/08 13:31
>>225
文字列の中に2バイト文字が含まれているかの判定だろ?

$_="おめでとう!";
if(/[\x00-\x7f]/){
print"2バイト文字が含まれていない\n";
}else{
print"2バイト文字が含まれている\n";
}

これが正解
>>237
メール欄読めって話でしょ。

ていうか、ここまでひっぱってもまだ文字コードが何かを言わない >>225
もう消えたのか?
それとも釣りだったのか?
>>237
> 半角カナは1バイト文字で
違うっての。
ごめん。>>240が違う。Shift_JISの場合は1バイトだね。
242デフォルトの名無しさん:04/01/14 17:37
ab|a|bのDFAってどうなりますか?
ab?|b
>>243
それってDFAの場合文字列 ab に対して a でマッチしちゃいません?
POSIX NFAならabにマッチするんだろうけど。
普通は最長一致をとるので問題ないかと。
246デフォルトの名無しさん:04/01/23 15:53
正規表現でかっこに囲まれたものを選びたいのですが、
(aiueo)
(aiu(e)o)
((a)iu(e)o)
(aiu(e(o)))
なんかを選べる正規表現てどうゆうふうに書いたら良いのでしょうか。
全部別々に書くと一番最初のを選びたくて(.*?)と書くと
他の(aiu(e)なども途中までで引っかかってしまいまって困っております。
無理です。
248デフォルトの名無しさん:04/01/23 16:10
ストリームに対して評価できる正規表現ライブラリありませんか?
bregexp.dllとかだと渡したバッファ内で完結しているようで
複数に分割したバッファで検索の継続ができないので不便です。
ありません。
>>248
終端が前もってわかるならboostのregexが使える
おいおい終端って・・
なんのためのストリームだよ。
じゃあ別に終端に達しなくてもいい
正規表現ライブラリの作者はアホばっかだね。
>>248
Haskellならあるよ。
255デフォルトの名無しさん:04/01/24 20:27
すんません。質問です。
「泊数」にはヒットしたいけど、「宿泊数」にはヒットして欲しくない
場合、正規表現をどうやって書けばいいですか?
>>255
「(?<!宿)泊数」
257255:04/01/24 21:37
>>256
さっそくのレスありがとうございます!
EmEditorで試してみたんですが、エラーになってしまうようです。う〜んなんでだろ?
>>257
ttp://www.emeditor.com/jp/help/howto/search/search_regexp_syntax.htm
単純に、サポートしてないからのようです。
(肯定|否定)先読みはあるのに、戻り読みがない。
この場合先読みでもいけるか。
「(?!宿)泊数」で。
「〜って正規表現はどう書くんですか?」系の質問は、仕様ツールも明記するが吉。
261255:04/01/24 22:02
>>259
ありがとうございます。これでできました!
こういうのはやっぱり、先読みのできない正規表現では無理ですよね?
%%
"宿泊数" ;
"泊数" {hoge();}
%%
[^宿]泊数
>>263
それだと「〜だった。泊数は〜」なんて文が来たら「。泊数」に
マッチするから、場合にもよるけどお勧めしない。
>>264
???
つーか先頭にマッチしないんじゃないかと。
[^宿]泊数|^泊数

これで先頭にもマッチするけど、どうよ?
でも>>264のパターンではやっぱりダメか・・・
先読みできないとちょっと無理かな?
宿泊数にさえマッチしなければいいんじゃないの?
269デフォルトの名無しさん:04/02/12 09:50
age
>>264 はマッチしてOKに思えるんだが・・・
271265:04/02/12 16:47
>>270
だろ?
いや、置換したいときに困るんじゃないかと思って。
「[^宿]泊数」にマッチした部分を例えば「台数」に置換するとき、
「〜だった。泊数は〜」が「〜だった台数は〜」になるので、
こういう場合困るから、と言ったのでした。
273デフォルトの名無しさん:04/02/13 03:16
すいません、質問です。
正規表現への置換の仕方がわかりません。例えば、
[0-9][0-9][0-9]→[0-9][0-9][0-9]
に置換したいときどうすればいいんですか?
正規表現は入力文字列に対するパターンマッチしか行わないから
置換なんて標準じゃ定義されて無いぞ
ライブラリのマニュアルでも読んどけ
>>273
s/0/0/
s/9/9/

条件分岐したいのなら正規表現だけではできない。
>>273
perlなら

$j="0|1|2|3|4|5|6|7|8|9":
%a=("0",0,"1",1,"2",2,"3",3,"4",4,"5",5,"6",6,"7",7,"8",8,"9",9);

s/($j)($j)($j)/$a{$1}$a{$2}$a{$3}/g;

かなぁ?
>>274
>>275
>>276
そうだったんですか・・・
プログラム舐めてました。すいませんでした。_| ̄|○
278デフォルトの名無しさん:04/03/01 20:57
C言語の関数一覧を抽出できる正規表現を教えてください。
その前にプリプロセスの過程を覚えねばなるまいて。
プリプロセス?
>>280
ネタ?
>>280
厳密なことをいうとそういうことになりまっす
283278:04/03/01 21:13
すぐにはスパッっと出てきませんか?
>>283
さー。ちょっと求めているものと違うかもしれないけど
cflow とか使えば?
windows 系ならフリーで適当にいろいろ落ちているし、
cflow のコマンドラインがイヤなら doxygen なんかもおもろいと思うけどね。
>>283
というか、最初の>>278の要望とまったく異なるレスをしてすまんかった。
さすがに (\w+)\( だと大雑把過ぎるか。
>>286
ものすごい量ヒットしましたね
普通に if(
とかが出てきました
>>287
予約語は後で取り除かないと駄目だろ
ctags使え。
(int|double|…)*\s*\w+\s*\([^\)]*\)\s*[{|;]

型 関数名(型 仮引数,…)
>>290
typedef とか struct 〜 とかどうするんだよ?
誰か勇気のある者が「正規表現じゃ無理」って言ってくれないと延々と続くぞ。
LR(1)っていうスレ作って誘導する方が勇気いりそう
294デフォルトの名無しさん:04/03/04 19:24
正規表現っていう言葉自体今日知った初心の者ですが質問です。
「○と○と○を含む言葉」の検索はどうやるんでしょう?

或いは「○と○と○を含まない」、でもいいです
/○/
AAA と BBB と CCC を(順不同で1つ以上)含む文字列にマッチする正規表現。
(.*(AAA.*(BBB.*CCC|CCC.*BBB))|(BBB.*(CCC.*AAA|AAA.*CCC))|(CCC.*(AAA.*BBB|BBB.*AAA)).*)
297294:04/03/04 19:42
296ありがとうございます
つうか微妙に質問まちがえた_| ̄|○
○と○と○と○によって構成されている単語の検索方法ってわかりますか?
○は1文字です、

298294:04/03/04 19:58
事故解決しました、お騒がせしております
自己解決でもどう解決したかくらい報告するのが漢ってもんじゃないのか?
>>299
もういいよ
ピリオドを検索対象にするには一体どうやればいいのでしょう?
「.」を打ったら全ての文字の代わりとされてしまうではないか
302294:04/03/04 20:23
>>299
あ、はい、え〜っと文字数が分っていたので
^[sadf][sadf][sadf][sadf][sadf]って感じにやったら出来ました!
おしゃ
>>301
\. か [.] でだいたいいける。
>>302
正規表現エンジンによるけど [asdf]{5} とかあるよ。
正規表現で無理なことなんかあるわけ無いだろ!!
はったりもたいがいにしとけ!
307デフォルトの名無しさん:04/03/04 22:25
>>305 あのなあ…
そういうのは任意の深さのネストしたブロックを
マッチする正規表現を書いてみてから言え。

{{{{{{}}}}}}
_| ̄{{{{{{}}}}}} ̄|○
腸?
>>305
文脈依存文法も知らんのか…
ネタにマ(ry
そこでプッシュダウンオートマトンですよ
313デフォルトの名無しさん:04/03/06 20:05
秀丸にあるタグ付き正規表現置換って、どの正規表現環境でもサポートしてるの?
>>313
タグ付き(というかグループ化?)はほとんどのやつが対応してるでしょ。
つーか正規表現に規格みたいなもんあったっけ。
POSIXのがそれっぽいけど。
メタキャラクタのエスケープ辺りの仕様違いはありえる。
315デフォルトの名無しさん:04/03/06 22:14
>>296

.*(?=AAA|BBB|CCC).*
>>315
ごめん、間違えた。
317U..X1l1Ubq ◆pdU1l1X..U :04/03/09 19:55
[^e-h]
318デフォルトの名無しさん:04/03/10 11:16
bodyタグって
/(<BODY)(.[^>]*?)(>)/
でひろえないかな?
ってか拾えんタスケテエ
HTMLタグやプログラミング言語のように、ネストしたブロックや、文字列中かどうかのように状態により切り替わる場合は
正規表現一発という訳にはゆきません。

正規表現で捕まえてシーケンスを作るしかないでしょう。
*bodyタグ*なら拾えますな。
321デフォルトの名無しさん:04/03/10 15:22
>>319

「正規表現で捕まえてシーケンスを作る」
よくわからんが調べて報告シマ
>>321
真面目にスキャナ&パーサ実装してもいいけど、
大抵は /(<BODY[^>]*?>)/i で事足りなくない?
それがコメント部に書かれていたら?
>>323
だから「大抵は」って言ってるんだけど。
じゃあ真面目にスキャナ&パーサ実装すりゃいい。
>>321
コメントと、文字列の中でなく、マッチするという条件だから
1)コメントに入るか、文字列に入るか、<BODY を見つけるかの ORでマッチさせて

そのマッチした条件を調べて 3つに分岐
2)コメントに入る -> コメントから出る だけみる ->また1)に
3)文字列に入る-> 文字列から出る だけみる ->また1)に
4)それ以外 ->BODYを見つけた

って処理の流れを作らなくてはいけない
秀ちゃんの性器表現痴漢が無いと生きていけない
327デフォルトの名無しさん:04/03/23 16:43
>>326
秀○… プッ
328デフォルトの名無しさん :04/03/24 23:27
Windows 2K の findstr で、"∫" (shift JIS code 0x8792) が検索できません。
下で一つも引っかかりません。

>findstr /n /c:"∫" \utl\eij\eijiro52.txt

Windows 向けの JVim に付属する grep でも同じように検索できません。

0x87や 0x92 は正規表現のメタ文字のコードではないはずです。なぜ検索できないのか理解できません。
どなたか理由を説明できますでしょうか。
>>328
"∫" が 0x8792 じゃないからだろ。
330デフォルトの名無しさん:04/03/25 03:01
>329 さん、レスありがとうございます。 328 です。

再確認してみましたが、DOS コマンドライン、shift JIS データファイルとも
"∫" は 0x8792 の shift JIS コードでした
>>330
てめーいい加減に白よ。0x81 0xE7 だろうがよ
すまん。0x87 0x92も"∫"だった。
http://www.watalab.cs.uec.ac.jp/students/monkeee/sjis.html
333包茎 ◆8fOTfwdIi. :04/03/25 06:20
普通に検索できるぞ。
Win2k の findstr も、BCC 付属の grep も検索できた。

>findstr /n /c:"∫" aaa.txt
2:∫

>grep "∫" *.txt
File aaa.txt:
334デフォルトの名無しさん:04/03/29 20:46
331> さん、333> さん、御指摘ありがとうございます。
おかげで、現象論的にですが、検索できない理由が解りました。Windows が shift JIS コードを変更してくれていました。

----------------------------------------
現象
shift JIS コード 0x8790 -- 0x879c の文字のうち "≒≡∫ √⊥∠ ∵∩∪" の文字について、findstr で検出できない

理由(推測) shift JIS コードを Windows が勝手に 0x81e0 -- 0x81ec に変更している

根拠
  0x8790 -- 0x879c の文字を含むファイルを IE で表示させると 0x81e0 -- 0x81ec に変わっている
  メモ帳でも同じコード変化が発生している
  0x8790 から始まる "≒≡∫ √⊥∠ ∵∩∪" の文字について findstr は検出できない
  自作の正規表現ライブラリならば0x8790 -- 0x879cでも検出できる

多分 Unicode, Wide Character, EUC, Multi byte の間の変換をやっているうちに、 0x8790 -- 0x879c のうちの一部のコードが 0x81e0 -- 0x81ec に変わってしまうのだと思います。今回はいい勉強になりました。ありがとうござました。
お久しぶりです。
>>305です。
正規表現で表現できない文字列グループを示してから言えや!!
おまちしてました。
日本語の正しい文にだけマッチする正規表現作ってから帰ってこい!!
>>336
日本語の正しい文をすべて列挙せよ!
それらを|でつなげ!
以上!!
338デフォルトの名無しさん:04/04/03 10:13
空行を削除する、正規表現の書き方教えてもらえませんか
339デフォルトの名無しさん:04/04/03 10:56
>>338
ですが、てゆうか秀丸エディターの文字置換で空行(^$)を削除したいと思いまして
置換する文字を何にも指定しなければ成功するかと思ったんですがうまくいきません
なぜなんだろう?
検索→^$
置換→
改行文字があるから。
>>339
漏れの秀丸、それやったら無限ループになった。
342デフォルトの名無しさん:04/04/03 11:21
>>341サン
>>338です
漏れのもやっぱ無限ループだっだんですね、いつか終わると思ってマスタ
う〜ん分からん、どうしたらできるんだろう?
検索→^\n
置換→
>>338
行自体を削除するのは単なる置換じゃないからねぇ。
sedだと /^$/d か?
delete-matching-lines みたいなのない?
>>343
あら?そんなんでOKなのか!
346デフォルトの名無しさん:04/04/03 12:06
ワオ
>>338ですが
>>343サン
ありがと、かこいいですね
347デフォルトの名無しさん:04/04/03 13:32
しつこく
>>338です、お礼に
調子こいて、行頭のスペースを消去するのを考えてみますた
今度は簡単にデキマスタ
検索→^スペース(文字を打ち込んだらイヤズラ、^(サーカムフレックス)の次に
本当にスペースをポチット押すだけです)
置換→
これでばっちりデキマスタマンセー
ほらみろ、正規表現でできないことなんか無い!
出来ない → 正規表現が悪い ×
出来ない → 自分の頭が悪い ○

こういう仕組みだ!
覚えとけ!!
ワロタ
>ほらみろ、正規表現でできないことなんか無い!
あるパターンの素数回の繰り返しとか考えてみる。
352デフォルトの名無しさん:04/04/03 23:26
ラブ遊戯王ですまないんだが、「/」より後にあるものを全て消した文章にしたい。秀丸です。

強奪/装備魔法
魔導サイエンティスト/闇/魔法使い/300:300/1/効果
波動キャノン/永続魔法

を、

強奪
魔導サイエンティスト
波動キャノン

にしたいんだが、
検索: /*\n
置換: \n
にしてどうにもならない。*がDOSとかワイルドカードの*とは違うのは解るが
こういう場合どうするんですか?ご教授願う。
検索: /.*$
置換:
354352:04/04/03 23:43
.*
という表現方法があったか。ナルホド。ありがたうござました!
日本語が不自由そうなのは直した方がよいよ
356デフォルトの名無しさん:04/04/04 00:34
正規表現で 'を\'に \を\\に って同時にしようと思ったらどうやったらええんかな
普通に
\ -> \\
' -> \'
ってすればいいんじゃ
perl的にはこうでつか?

s/\\/\\\\/g;
s/\'/\\\'/g;




日本語使えなくて良いからとにかく速くて後方参照も使える正規表現ライブラリってどっか無いっすか?
>>351
あるパターンの素数回の繰り返しに該当する文字列をすべて列挙せよ!
それらを全て|で繋げよ!
以上!

どうだ簡単だろ?
humaton ですか?
>>356
同時にってことだと Perl だと s/(['\\])/\\\1/g かな。

>>358
鬼車とかどうすか?
362デフォルトの名無しさん:04/04/10 21:38
>>359さんじゃないでつが、これまでの議論では、
どうも普通の表現で正規表現でできないことはない
ってことでいいでつか?
363デフォルトの名無しさん:04/04/12 07:56
できない事はあるんじゃないの
ただPerlの正規表現はかなりのことができると思うけど
>>363
マジレスかよ。
>356
s/([\\\'])/\\$1/g;
366デフォルトの名無しさん:04/04/14 20:06
文字列の中に含まれてる ヴァ、ヴィ、ヴ、ヴェ、ヴォ を バ、ビ、ブ、ベ、ボ に
一発で変換する正規表現はありますか、それともreplaceを5回使わないといけないですか?
367デフォルトの名無しさん:04/04/14 21:07
正規表現は置換しない。マッチするだけだ。そこんとこヨロシクな!

Perlなら、変換表 $table をハッシュで作っておいて、

%taget('ぁ'=>'あ',以下略);
$a =~ s/(ぁ|ぃ|ぅ|ぇ|ぉ)/@{[ $table{$1} ]}/;
s/あやや(.*)(?:\?|?)/前田健\1かよ!/g;
性器表現
しかもマトンって事は羊か…
変態だな。
371デフォルトの名無しさん:04/05/06 16:16
<A HREF="hoge1.htm"><FONT COLOR='#FFFFFF'>リンク1</FONT></A>
<A HREF="hoge2.htm"><FONT COLOR='#FFFFFF'>りんく2</FONT></A> .......

こんな感じのhtmlから「リンク1」を指定したら
hoge1.htmが返ってくるというようなことをしたいのですが、

my $s = 'リンク1';
my $link =~ /<a +href='(.+?)'>(.*)$s(.*)<\/a>/i;

何か良い方法を教えてください。
>>371
フォーマットが大体それで揃ってると仮定してあまり凝ったことしないとすると、
my $link =~ /<a +href=(["'])(.+?)\1>(.*)$s(.*)<\/a>/i;
で $2 を取り出す、みたいな感じでどう?
正規表現とは関係の無い話になっちゃうが、HTMLパーサライブラリ使うべき
だとは思うねえ。
HTML::TokeParserとかさ。
374371:04/05/07 10:22
>>372, 373
レスありがとうございます。

フォーマットが全然そろっていない & 自分のスキル不足のため
正規表現ではなく、素直に HTML::TokeParser か HTML::Parser あたりで考えます。
375デフォルトの名無しさん:04/05/07 10:24
シングルバイトとマルチバイトをマッチさせたいのだが、どうすりゃいい。具体的には

"あいうaiu" をそれぞれ、分解して「あいう|aiu」としたいのだが
>>375
もうちょっとちゃんと説明しないとレス付かないんじゃないか?
文字コードを指定しないと何とも言えない
UCS-2で
UCS-2なら全ての文字がシングルバイトだ。
質問ですが""で括られた文字列を検索したいんですが
"\".*\""じゃ駄目なんでしょうか?

すいません、出来ました。。。。


勘違いでした吊ってきます。
やっぱ出来ませんでした・・・・
複数""があると全部括ってしまいます。

個別にマッチさせる方法ってないでしょうか。
383デフォルトの名無しさん:04/05/11 23:40
あげてー
>>380-382
まず使用言語や、"" 中に \" が現れるか否か等、
条件をはっきりさせて欲しいのだが。
http://www.kt.rim.or.jp/~kbk/regex/regex.html

"[^"]*"

SEE ALSO
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
C#です。
""内には\"も入った方がいいんですが、面倒なんでしょうか?

"test" aida "testooooo" aida2 "ぽっぽぽー" "尻切れ

ってあったら "test" "testooooo" "ぽっぽぽー" をヒットして欲しいんです。
よろしくお願いします。
"(\\"|[^"])*" だっけ
詳説正規表現にいろいろ書いてあったと思う
(\"[^"]*)\"
\"(\\"|[^"])*\"
先頭は"で途中に"を含まないか\"がある、最後に"が来る。

一応NextMatchと組み合わせると出来ました。
ヒントありがとうございました。
388デフォルトの名無しさん:04/05/12 15:39
正規表現の記述について質問
「abc」の後に「def」と続く、「abc」部分にマッチさせるには、
/abc(?=def)/ ですが、
手前に「abc」がある「def」の、「def」部分だけにマッチさせるには
どう書けばいいんでしょうか?
/(?=abc)def/ では駄目みたいなんですけど。
/(?!abc)def/
>>389
動きました。ありがとうございました。
「動いた」と書きましたが、早とちりだったみたいw
結果が /def/ と同じでした。
使ってる正規表現ライブラリが、対応してないのかも… 諦めます。
392さん、ありがとうございます。
/(?<=abc)def/ なんですね。勉強になりました。
でもライブラリが未対応だった _| ̄|○ガックシ
>>393
> 使ってる正規表現ライブラリが、

何使ってるかは先に書け。
pcre使ってる人いる?
これの日本語に対応したのない?
いまどきふつー鬼車。
ふつーはboost::regexだろ
>>397
日本語への対応はいかほど?
>>398
UCSで使う分にはなんの問題も無い。
>>399
そもそも「UCSで使う」というのがいちばん問題なような
UTFで使えないんだから問題
鬼車、MBCSのままで処理してるから日本語処理だと遅そうだなと
思ったが、んなことは無いな。C++から使うんならラッパークラスは
欲しい感じだけど

ただ、文書側のエンコードを決め打ちできない場合
またはソースコードのエンコードと差がある可能性がある場合は
どのみち文字コード変換必要になるんで、結局ユニコードで
やったほうがラクという話も
そのうえでユニコードカテゴリやユニコードプロパティが
サポートされてると、便利なのよね。\p{CJKUnifiedIdeograph}とかさ。
欧米人のことしか考えてないPosixの文字クラスなんぞ誰が使うかっつーの。

UTF-8はリテラルが簡単に指定できない点がイマイチ
まーwchar_tはwchar_tでサイズもエンコードも環境依存で
使えないコンパイラもあるというウンコではあるがな。
今ならUCS4でやれば良いと思うけど、
なんか無駄な気がしちゃうんだよな。
> UTF-8はリテラルが簡単に指定できない点がイマイチ
アフォなことを書いたな。
8bitスルーな「だけ」でエンコーディングの解釈をしないコンパイラなら
ソース自体をUTF-8にしときゃいいし、逆にそれが一番安全なんだよな。

でもMSのCLコンパイラみたいに下手にローカライズされててしかも入力
エンコーディング指定できないコンパイラではその手が使えないのよね。
ったく今どきソースのエンコーディング指定できないっていう
原始人的仕様は勘弁して欲しいね。C#のcscコンパイラでは対応してるくせに。
MSの製品はOSというか製品群全般がCP932かUCS(と、UTF)-16だから
他の文字コードが使われる事を想定してないだけじゃないのかな。
UNIXみたいにEUCもSJISもJISも、使う人間によるみたいな環境じゃないんだから。
ucs-16なんてねーだろ?
>>405
いやそういう話じゃなくてさ。
日本ローカライズされたclコンパイラでISO-8859-1なソースをコンパイル
する手段が無いのはいくらなんでもウンコでしょってこった。
JISX0208とかの文字集合の奴なら、EUC-JPでエンコードされてようが
ISO-2022-JPでエンコードされてようがとりあえず変換すりゃいいからいいんだよ。
でも文字セットが違う場合、とたんに整数配列に変換して埋め込むという
超原始的手段しか無くなる。
せめてUTF-8ぐらいはサポートしてくれれば、それだけで幸せに
なれるはずなんだが。

ちなみにWindowsは日本だけで出荷されてる製品じゃないから
932以外のコードページもあるんですが、ご存じ?
EUC-JPのコードページも実は定義だけはされてるんだよね。
>>407
Windowsのコードページは「変換テーブル」による変換対応だから
どっちにしろ日本語WinならSJISとUnicodeしか通らない罠
>>408
それって
MultibyteToWideCharに指定できるコードページが
932とUTF7とUTF8だけってこと?
ほんとに?
なんだ通るじゃんよ、Latin-1コードページ……って当たり前だけど。
>>408は何を根拠にそんなこと言ってるのさ。
MultibyteToWideCharやWideCharToMultiByteなどで
UCS2やSJISに変換しないと、GDIやUIなどの基本APIへ正常に入力できないってこと。
412デフォルトの名無しさん:04/05/14 19:01
>>407
ちなみに、EUC-JP のコードページって何番なの?
教えて。
>>412
MSDNによれば51932。
MSSDKの
BaseServices/Unicode and Character Sets/Unicode and Character Set Reference/
Unicode and Character Set Constants/Code Page Identifiers
に記述されている。

ただし、多分何の役にも立たないだろう。
俺の環境でEnumSystemCodePages()を実行すると、
installedでないばかりかsupportedですらない。
要するに、51932というコードページはつかえない。
IEその他のアプリケーションはおもいっきりEUC-JPを認識するばかりか
いわゆるJavaのauto-detect相当のheuristicな判断もしてるんだから、
APIにしてくれてもよさそうなもんだけどね。
COMでもイイからどっかに使える口は無いのかしら。
>>413
ありがとう。参考になった。
IsValidCodePage( 51932 ) は 0 を返すので、確かに使えないっぽい。

ちなみに、ISO-2022-JP が、50220 にマップされているけど、
こっちは IsValidCodePage が 1 を返すので、使えるみたい。
でも、JISAutoDetect(50932) は 0 を返す…

ちなみに OS は WindowsXP

416デフォルトの名無しさん:04/05/14 21:09
鬼車って、名前が嫌なんですが。

とても仕事で使えそうもないです。
ノームのログはどうやったらきれいに保存できますか?
418デフォルトの名無しさん:04/05/25 08:44
age
$test = "ー";

$match = $test =~ m/\[/;

print "$'<$&>$`\n";

Perlの正規表現で
これだと'ー'にマッチしてしまうんですけど
'['だけにマッチさせるにはどうすればいいのでしょうか?
>>420
ありー!

EUC_JPに変換してからマッチで解決しました。
422デフォルトの名無しさん:04/06/04 10:28
全角文字(日本語のみ)にマッチさせたいんですがどうすればよいでしょうか?
できるだけパターン文字列は短いやつにしたいんですが・・・

環境は.netです。
正規表現のすんごいひとよろしくお願いします。
英数記号以外はすべて日本語にすりゃいい
424デフォルトの名無しさん:04/06/04 16:08
peggyを使って、正規表現でメールアドレスに検索するにはどうしたらいい?
>>422
.netなら(ユニコードカテゴリ\p{IsCJKUnifiedIdeograph}とか)も使えるし
\uでUTF-16コードポイント指定もできるんで
どうとでもしる。
後はユニコードのコード表でも見て。
426デフォルトの名無しさん:04/06/04 19:55
従来の正規表現に変わる新言語って研究されてたりしないの?
CJK統合だけで構成されてるとそれが日本語かどうか判別できるっけか。
428デフォルトの名無しさん:04/06/05 02:56
Javaで数式演算を表す正規表現って作れませんでしょうか?
+-*/()までに対応した。。。

どうしても()の制御ができません。。。orz
>>428
正規表現では(一般に使われてる拡張正規表現でも)表現できません。
これくらい初歩の初歩なんで知っとけ。
430428:04/06/05 03:23
。・゚・(ノ∀`)・゚・。
>>429 どもでした。勉強不足ですみません。。。
>>426
文脈自由文法、
あるいは、プッシュダウンオートマトンが受理する文法、のことか?
432デフォルトの名無しさん:04/06/07 17:01
>>426
XML等の木構造に対応する正規表現が研究されている
XML処理に正規表現が使える処理系もあるみたい
http://xduce.sourceforge.net/
433デフォルトの名無しさん:04/06/08 22:08
"("にマッチさせたいのですが、
(一文字の数字)というパターンはマッチさせたくない。
このような正規表現はどうすればよいですか?
環境は.netです。
434デフォルトの名無しさん:04/06/08 22:11
>>433
一文字の数字はマッチせず
連続2文字以上の数字はOKですか?
それによって変るよ
435デフォルトの名無しさん:04/06/08 22:15
>>434
すいません書き方が悪いんですが、
カッコの始まり"("にマッチさせたいんですが、
次の文字が数字でその次がカッコの終わり
例:(0)
のならびのカッコの始まりにはマッチさせたくないんです。
カッコの中が2文字以上であればマッチしてOKです。
436デフォルトの名無しさん:04/06/08 22:36
.netは知らんが
Javaならこんな感じになるのかな?
叩き台にどうぞ
指定のパターンで始まれば
後ろはどうでもいい場合です
^[(]+[\\d]{2,}+[)].*
437デフォルトの名無しさん:04/06/08 22:46
>>436
サンクス!
[(][^\d]でいいことに気づきまつた
うごくけど、
[(]
が意図不明。

あとPerl互換(PCRE)ならもっと明示的に記述できるよ。
\((?!\d)
>>438
.net で PCRE って使えるの?
PCREをWin32 DLLとしてコンパイルすれば当然使えるが
メリットは限りなくゼロだろう

ちなみに?!(Zero width negative lookahead assetion)は.netのregexでもサポートしてるみたいだね
ttp://msdn.microsoft.com/library/en-us/cpgenref/html/cpconGroupingConstructs.asp
参照
441デフォルトの名無しさん:04/06/24 18:06
前後読みに対応していて、マルチバイト文字とワイド文字のどちらでもOKな、
C++ 用のフリーな正規表現ライブラリってありますか?

いいライブラリがあれば、教えてください。
442デフォルトの名無しさん:04/06/26 13:58
C++用の正規表現ライブラリってboostしかしらんなぁ

> 前後読みに対応していて、マルチバイト文字とワイド文字のどちらでもOKな、

使ったことないからこの条件を満たしているかわからんけどw
wideのみかつWin専用なら
WSHのRegExp(COM)があるけど駄目か・・・
>>441
VC++7.1専用でよければ、つくったのがあるけど…
445441:04/06/28 20:58
環境は VC6 です。言い忘れてました。
つーか、無いんですね。
とりあえず、後方参照と先読みでなんとかなりそうなので、それでやってみます。
446デフォルトの名無しさん:04/06/30 19:13
ちょっと割り込ませてください。

海外向けのwebページを作っているんです。
html ファイル中で、ASCII以外の文字を見つけたいんですけど、
どんな正規表現が可能ですか?

ちなみにEmacsを使います。
>>446
ASCIIが印字可能文字のことだと仮定すると、開いた瞬間にモードラインの表示で分かるんじゃないのか?

保存するときに確実にしておきたいのであれば、
set-buffer-file-coding-system nil
とかやっとけば?変なの入ってたら保存時に聞かれる。
Local VariablesでISO-8859-1を指定しておいてもいいし。
Received: by j.asahi-net.or.jp (ATSON-1) ; 30 Jun 2004 19:58:02 +0900
メールのヘッダーの一部なんですが、
この中から、日付だけを「2004/6/30/19:58:02」という形式で抜き出すにはどうしたらいいんでしょうか?
正規表現ならできると思うんですが・・・
失礼。検索したいってことね。↑は忘れて。
(re-search-forward "[^\x00-\x7F]") ではダメ?
>>448
置換デリゲートが利用できる
ECMA-Script または .NET の正規表現ならば可能かもね。

[\s\S]+?;\s+([0-2]?[0-9]|30|31)\s+(\w{3})\s+(\d{2,4})\s+(\d{2}:\d{2}:\d{2})[\s\S]*

みたいなパターンで検索して、\2 を自分で加工してから、

\3/\2/\1/\4

って並べればいいのでは?
それって本当に正規表現でやるべきなのか?
日時をしめす場所までの検索は必要かもしれないが、
それ以降は、たとえば ECMA-Script ならば Date オブジェクトに突っ込んでおけばいい。
でも、>>448 は、正規表現だけでやりたかったようだったから、>>451 を提案してみた。
>>450

そうやって文字コードが指定できるんですね。
ためしに、ここのページをMeadow2で

re-search-forward RET
[^\x00-\x7f] RET

ってやると、このページだと、
"["とか" "とか" <"とかにヒットしてしまう。
何かおかしいのかな?
0x00-0x7f ?

対話的入力で \x00 なんて書式は使えないと思うぞ。
じゃ、どうしたらいいの?
板違いだけど教えて。

ESC-C^S-ENTER ?
\x00 は C-q C-SPC
\x7f は C-q Backspace
かな。
>>457

検索ができました。 どうもありがとう!!
[^^@-^?] って表示になるんですね。
>>414
すれ違いの上に亀レスだが、PlatformSDK の mlang.h の中に
IMultiLanguage(2|3)? つーインターフェイスがあって、それを使えば
IEの文字コード変換機能が利用できる。
460デフォルトの名無しさん:04/07/11 02:14
Twoパスでマッチ結果を絞るのを
Oneパスでやろうとすると非常に困難になってしまうのですが、
仕方がないのでしょうか?
>>460
あまり有りえないケースを想定して複雑なことになってるなら、
2回に分けたほうが人間にも計算機にもやさしいかもね。
(foo|bar|baz|...)
ていう正規表現の文字列を動的に100〜1000個分くらい生成してマッチングするのって
著しく(O(n)を超えた速さで)重くなるって事はないよね?
遅くなる。理由は忘れた。
処理速度を押さえたいなら、一単語マッチをorでつないで1000個書く。
464460:04/07/11 20:26
>>461
マッチ結果減っていくんだから
2回に分けたほうが正解っぽいですね。
1回でやるほうはベンチ取ったらありえないぐらい遅かった...orz
465デフォルトの名無しさん:04/07/13 02:36
「言明」に関する説明がのったWebサイトってないですかね?
#給料日前なので、オライリ本買えってのは無しで。
以前、某スレで見かけたスクリプトの意味がまったくわからんのでつよ・・・
↓相対URLを絶対URLに変換するらしいんですが、もうなにがなにやら。

<?php
$a='http://aaa.co.jp/bbb/ccc/ddd/eee/fff';
$b='././../.././././a/../a.a/../a/b/../../../b/.';
print "$a\n$b\n";
print zettaiURL($a,$b);

function zettaiURL($URL,$soutaiURL){
 $p=array('@/\.(?=/|$)@', '@^(.+//.+)/(?!\.\./)[^/]+/\.\.(/.*|)$@e');
 $r=array('','preg_replace($p,$r,str_replace(\'\\\\"\',\'"\',\'\\1\\2\'))');
 return preg_replace($p,$r,substr($URL,0,strrpos($URL,'/')+1).$soutaiURL);
}
?>
466デフォルトの名無しさん:04/07/13 03:36
とにかくコンパクトな正規表現エンジンってないですか?
ソースも付いてて。
自分で書くとか。
468デフォルトの名無しさん:04/07/13 14:45
どんな感じで書いてったらコンパクトになりますかね。
トークンに分ける→ツリー作成→εNFA→NFA→DFA→判定
とりあえずいちいちこんな風に順番にやってたらコンパクトにならないですよね。
a+
a*
.
[a-z]
[^a-z]
(ab)
a|b
この辺の基本的なのだけ(awk相当)実装すれば十分なんですが。
469デフォルトの名無しさん:04/07/13 20:43
気になる彼女に性器表現できないのですが、何がいけないんですかね?
さてと
>>466
Henry Spencer の正規表現ライブラリとかどうかな。
正式な配布元はどこかわかんないけど、 FreeBSD の libc なんかに使われてる。
あと、「プログラミング作法」の「9.2 正規表現」に、
簡単な正規表現の実装の説明があるね。
ATL の正規表現とか、Greta とかどうよ >>468
474デフォルトの名無しさん:04/07/14 12:58
想定外のデータを読み込んだ時に無限ループぽくなることがあるのですが、
停止や先読み後の飛ばし読み
はできないのでしょうか?
実装によるよ
哀れな >>469
>>475>>469 へのレスでつか?
"This is a (test) file."

という文字列から (test) という部分を取り出すにはBoostのRegexでどういう記述になりますか?

boost::regex expression("\([a-z]*\)");

としても 「warning C4129: '(' : エスケープ シーケンスとして正しく認識されませんでした。」という
警告が出て、実際に認識されてないようでした。'(' が '<' なら正しく認識出来るんですけど・・・
boost::regex expression("\\([a-z]*\\)");
480478:04/07/15 21:12
>>479
!!
regexの方にキャラクタとしての '\' が渡ってなかったんですね orz
どもです
Cライクな言語で誰もが最初にはまる罠だな
C#の@""は便利
483デフォルトの名無しさん:04/07/31 13:45
正規表現で「||」にマッチさせたいのですが、
どうか教えてくらはい。
おながいします。
>>483
もしかして\でエスケープできるの知らんの?
Emacs Lisp なんかだと大変よねー
秀丸スレで聞いたら誰も答えれなかったんだけど
これは置換じゃ無理なの?

<div id=test>複数行の、改行スペース半角英数字記号</div>
を<div id=test><div>に置き換えたいんだけど、
<div id=test>\"[^"]*\">\f[A-Za-zA-Za-z0-9]+\f</div>
を<div id=test><div>では出来ませんでした。
>>486
複数行にわたるテキストへの対応は実装によってまちまち。

例えばPerlだとsオプションをつけて、
s!<div id=test>.*?</div>!<div id=test><div>!si
でいけるけど、秀丸での表現はわかんない

結構高価なシェアウェアなんだしヘルプに書いてないの?
>>486
最近 WebProg の方の正規表現スレでも出てたが、ヘルプの
「検索系コマンド」の「\nを使った複数行検索の際の制限について」
を参照。
489デフォルトの名無しさん:04/08/03 02:30
先読みって未だに理解できません
なにを先に読んでるんですか?

abcdeに
(?=c)はマッチするが
(?=c)(?=e)はマッチしないのはなぜですか?
>>489
そりゃ先読み過ぎ。 (?=c)(?=d)(?=e) ならマッチするでそ。
>>489-490
ab(?=c) は (直後に c が来る) ab にマッチする。「次に何
が来るか」を先に読み、それ自身はマッチした文字列には
含まれない。

(?=...) は 0 文字幅なので、何個 (?=...) を連ねてもマッチの
開始点は ab の直後から。つまり ab(?=c)(?=e) は
ab の直後に c が来て、且つ ab の直後に e が来なくては
ならない。なのでこれは絶対にマッチしない。
先読みって見易さには影響するけれども、使わない
で同じ文字列の集合にマッチする正規表現をつくれ
そうな気がするわけですが、これは正しいでしょうか?

それとも先読みがないと書けないような例はありますか?
493デフォルトの名無しさん:04/08/03 12:28
>>491
丁寧なレスありがとう
ab(?=c) は (直後に c が来る) ab にマッチする。であれば
(?=c)は(直後に c が来る)何にマッチするのでしょうか?
~~
494デフォルトの名無しさん:04/08/03 12:41
if文の条件式に使うな
>>494
何故使っちゃダメなんですか?
>>493
直後にcが来る空文字列にマッチするのかな。
マッチ位置を取り出すといった使い方ならそれ
なりに意味はありそう。
>>492
マッチした部分をどうこうしたい場合、例えば Perl で
s|<tag>.*?</tag>| uc $& |eg; は tag も大文字にしてしまうが、
s|(?<=<tag>).*?(?=</tag>)| uc $& |eg; なら大文字にならない。

また「先読み」だから、次のマッチの開始点は (?=...) の前になる。

$str = 'abcabcabcabc';
$str =~ s/(ab)(ca)/ uc($1) . $2 /eg;
print "$str\n"; # ABcabcABcabc

$str = 'abcabcabcabc';
$str =~ s/(ab)(?=ca)/ uc $1 /eg;
print "$str\n"; # ABcABcABcabc
>>497
最初の例は

s|<tag>(.*?)</tag>| uc $1 |eg;

でいけるじゃんと思いますが、2つ目の例は
確かに先読みじゃないと無理っぽいですな。
なるほど〜。
メールや MIME のヘッダ文字列をフィールドにばらすとか。

header_fields = header_string.split(/(?<=\n)(?=\S)/)
500デフォルトの名無しさん:04/08/03 19:12
>>498
s/(ab)/uc $1/ge;
でイイじゃん


何にもわかってないアホが現れた
502デフォルトの名無しさん:04/08/04 02:52
分かってるつもりのアホが現れた
>>498
s|<tag>(.*?)</tag>| uc $1 |eg;

じゃなくて

s|<tag>(.*?)</tag>|"<tag>".(uc $1)."</tag>"|eg;

とかしないと<tag>と</tag>が削られちゃいますな。
>>500
単にabを全部置換したいんじゃなくて、直後にcaがあるものだけ
なのよ。497の例で最後が...abcとここだけ大文字になってないの
がミソ。

質問です。
</span> [mail] :04/06/01 11:45 ID:pWxUFuLq<>

<>mail<>04/06/01 11:45 ID:pWxUFuLq<>
にするにはどうすれば良いのでしょうか?
04/06/01 11:45 ID:pWxUFuLpはもちろん2ちゃんの仕様通りでIDは???の可能性もあります。
さらに年は4桁の可能性もあるんですが…
Speeeeedを使っています。
: は日付以後には無いんだからそれを利用すれば?
>>506
あ、それがですね<>の後ろにも文字列があるんですよ。
本文なので「:」がある可能性も十二分にあるんです。
</span> [mail] :04/06/01 11:45 ID:pWxUFuLq<> の後には何が来るかわかりません。
「</span> [」は必ず1個しかないのでそれを単純に置き換えれば良いのですが、すると
<>mail] :04/06/01 11:45 ID:pWxUFuLq<>
となります。
最後の<>の後には何が来るかわかりませんが<>は必ず来ません。
それに初めの<>の前も名前欄なので何が来るかわかりませんが<>は絶対に来ません。
ですので
行の最後の<>より前にある
] :
を<>に置き換える。
という事をしたいのです。ですので
] :(.*?)<>(.*?)$

<>\1<>\2
に置き換えれば…
と思ったのですがダメでした。
どうすれば良いのでしょうか…?
</span> \[([^[]+)\] :([^<]+)<>(.*)

<>$1<>$2<>$3

じゃだめかよ
>508
後半部分は要らないのでは。
あと最初の[]の中身が違うっぽい。
</span> \[([^]]+)\] :(.*)
<>$1<>$2
>>509
寝ぼけてたサンクス
>>508-511
おぉ、出来ました。
ありがとうございました。
感謝感謝です。
既に&を&に変える作業をしてしまった後で、
if($message =~ /http:\/\/([a-zA-Z0-9\.\/\-+#_?~&\%=^\@:\;]+)/i){
$1 =~ s/amp\;//g;
}
のような方法で、$message中のURLを&から&に変える作業をしたいのですが、
上の文で試したところ$1から;の行の間でエラーメッセージが出てしまいました。
どうすればよいのでしょうか?ご指摘の程ご指導をどうか宜しくお願いいたします。
513512:04/08/05 20:07
&を&amp;です。。
>>512
正規表現の問題というよりは Perl の問題のような。

my $msg = $1;
$msg =~ s/amp\;//g;

とするとか。
515512:04/08/05 20:54
有難う御座います。。
でもこれでは$messageは変化しないのでは無いですか?
確かに。じゃあこれで。
$message =~ s/(?<=http:\/\/)([a-zA-Z0-9\.\/\-+#_?~&\%=^\@:\;]+)/$_=$1;s#amp;##g;$_/gei;
517512:04/08/05 21:33
それは素晴しいですね。。
有難う御座います、ためさせていただきます。
518512:04/08/05 21:41
有難う御座います、成功しました。
もうひとつお願いがあります。
これ以降は無駄な馴れ合いになりますが・・・・。

私の本ではしっかり正規表現が記載されていません。
オススメの文献、HPなどなど教えていただきたいです。

これというのも今回の件を例にして言うと、
?<=のような正規表現の意味を理解していません。
教えてもらってばかりでは迷惑がかかりそうなので・・・。。
>512 その心意気やよし。
ある程度正規表現を知っていることが条件だけど、
ttp://www.kt.rim.or.jp/~kbk/regex/regex.html
ここなんかは大体の正規表現を載せてる。

あとは各言語ごとの正規表現のリファレンスも参考にしつつ勉強するのがいいと思う。
言語によって正規表現はまちまちだし。
>>518
マルチポストの上、そこの1も読まず、か。
http://pc5.2ch.net/test/read.cgi/php/1069245758/1
521512:04/08/06 00:26
>519
有り難う御座います、参考にさせて頂きます。
早速お気に入りに追加させていただきました。
隅から隅まで読み直したいと存じます。。
時間を割いてのご指導有り難う御座いました。

またお手数とは思いますが、>516を解説頂きたいです。
無理の願いと承知の上ですのでスルーして頂いても結構です。
本当に有り難う御座いました心から感謝しております。

>520
すいません、ご報告有り難う御座いました。
友達に聞いて回った結果かもしれません。
しかし、テンプレに関しては目を通させて頂きました。
ご指摘感謝いたします、これからは注意致します。
>>521
まず s/(前半)/(後半)/gei の前半部分から。
(?<= ) のところは lookbehind (戻り読み) ってやつ。
マッチさせたいけど置換対象にしたくないのでこうしてみた。
>>489-504 あたりで議論されてるから見てみて。 (漏れも >>499 で初めて使った。)
その後ろはわかるよね。

後半部分は、正規表現のオプション e を付けてるので、
Perl の式として評価した結果が置換結果となる。
'#' とか使ってるからわかりにくいと思うけど、
$_ = $1; s/amp;//g; $_;
と書き下したらわかるよね。
つまり、前半でマッチしたもののうち、 "http://" 以外の部分を対象として、
s/amp;//g の置換を行ってる。

ところで、これ、もっとスマートに書けないかなあ?
523512:04/08/06 08:19
>522
またまた有難う御座います。
それと、マルチ(?)の件失礼いたしました。

スマートにするとしたらマッチしたもの全てにamp;をかける方法が?
しかし全てにでは無く?以降にamp;をかけるほうがイイのかも知れません。
以降は自分で試して見ます。もし他に例があったなら報告したいと思います。
有難う御座いました、重ね重ね御礼を申しageます。
>(//▽//)b
この顔文字って正規表現っぽいよね。
525デフォルトの名無しさん:04/08/08 19:57
例えば
【2004年12月1日の40日後は2005年1月10日】というように、
ある日付に、指定した日数を足した日付を返したいのですが、
どのようなソースになりますか?

$a = 1+40
月が12ならば、
$a = $a - 31
日 = $a
月 = 月 + 1

↑かなり省略してますが、このような方法しか思い浮かばず。。。

初心者でスイマセン。。。
ご教授お願いいたします。
正規表現と何の関係が?
527デフォルトの名無しさん:04/08/08 20:12
>>526
正規表現でのやり方はあるのでは
と思いまして。。。(;´Д`)
まあぶっちゃけて言うと、あるかんなもん。

素直に何かプログラミング言語を使いなされ。
>>528
ほんと?ためしてみた?
>>529
できるできないの話じゃなくて正規表現でやるべきことじゃないだろ
正規表現に足し算なんてあったか?
concatenationならあるよ
533デフォルトの名無しさん:04/08/09 07:43
爺さん:夏休みだねえ・・・
婆さん:えぇ、本当に
正規表現の貧弱さを指摘されたからって切れるなよ
貧弱っつーか、何でもかんでも正規表現でやろうってほうが頭おかしい
バッドノウハウそのものだな正規表現って。
MSあたりに作り直してもらおうぜ。
挫折した方がわめいています
>>537
>>525 の答えをどうぞ。
MSで思い出したけど、Visual Studio系とかについてる
MS独自の正規表現が使いにくいったらない。

慣れれば違うんだろうけど、ECMAScriptとかPOSIX系の正規表現に慣れちゃうと
他の正規表現は使えませんな。
>>540
emacsの正規表現とか?
.NETのRegexは結構マトモですよ。
542デフォルトの名無しさん:04/08/10 00:34
>>541
けど、perlより遅い
.NETのREは速度よりも構文に組み込まれてなくて使いづらいから嫌
VB6だけど、コードエディタから一応正規表現が使えるけど

引数 pattern 内の文字  引数 expression での一致
===========================================
?               任意の 1 文字
*               0 個以上の文字
#               任意の 1 個の数字 (0 〜 9)
[charlist]           引数 charlist で指定した文字に含まれる任意の 1 文字
[!charlist]          引数 charlist で指定した文字に含まれない任意の 1 文字

もうね(ry
それは正規表現じゃなくてグロブ
原理的には最長一致だからといって遅くなるわけじゃない。
縦型探索ならサボれば早くなるってだけの話。
再帰しないヨコ型の探索の実装が少数派ですね。
547デフォルトの名無しさん:04/08/10 16:43
正規表現の 8進エスケープってみんな使っている?
英語圏の人間は良く使うのかな?
>>547
基本的に日本語リテラル文字列をコードに持ち込みたくなんだけども、
どうしても日本語のパターンをコードに書かなきゃいけない、
という場合に使ってます。
それだったら普通\xか\uつかわない?
\0の必然性がない。
そもそも、8進エスケープって、後方参照とかぶるからイヤ。
\o{ooooooo...} みたくすればよかったのに。
551デフォルトの名無しさん:04/08/16 04:20
[a&&[^a]]
みないな何にもマッチしないよーってのを調べる方法はないでしょうか?
552デフォルトの名無しさん:04/08/16 04:22
>>551
ネタ?
彼はもう寝た
^ぬるぽ$
s/ぬるぽ/ガッ/g
556デフォルトの名無しさん:04/08/16 18:41
bregexp.dll を使ってプログラミングしている.
正規表現で類形一致した文字列の長さと
それにかかる計算量の関係はどうなんだろうか?

例えば,

m/hoge/ , m/hogehoge

で類形一致させた場合は何倍の計算量なんだろうか?
test
558デフォルトの名無しさん:04/09/10 16:04:10
ほげ\s*(.{5,10})\s*はげ
にしてもヒットする単語のお尻に空白がついちゃうのは何が悪いんでしょうか?
559デフォルトの名無しさん:04/09/10 16:27:45
>>558
貪欲マッチ (最左最長マッチ) するから。
(.{5,10}?) とか (\S{5,10}) とか (.{4,9}\S) とかしる。
560デフォルトの名無しさん:04/09/10 16:27:50
>>558
() に空白を含めたくない、という意図なら、
ほげ\s*([^\s]{5,10})\s*はげ
とかしないと。

.{5.10} が欲張りで空白も食べちゃうのがキミの意図と違うんだろう。

561559:04/09/10 16:35:07
ばっちりいけました。

ありがとうございました。
562デフォルトの名無しさん:04/10/06 11:45:03
正規表現エンジン作ってる人いる?
563デフォルトの名無しさん:04/10/08 23:23:30
イジリー岡田とかチョコボール向井とか加藤鷹とか
564デフォルトの名無しさん:04/10/09 01:20:54
565sage:04/10/14 02:11:20
>562
ノシ

今コンパイラコンパイラ作ってて、
正規表現によるトークンナイザ実装中だよん。
566デフォルトの名無しさん:04/10/14 02:28:41
ヲタハケーン
567デフォルトの名無しさん:04/10/16 20:50:37
鬼車って後方参照遅いね。
568デフォルトの名無しさん:04/10/29 15:55:15
686 名前:デフォルトの名無しさん[sage] 投稿日:04/10/29 13:49:57
正規表現で後方検索することってないよね。
不要だからライブラリが存在しないのでは?
Delphiにないから不要といってるのではないよ。
569デフォルトの名無しさん:04/10/29 19:05:42
最後の一言が弁解がましくて微笑ましい。
570デフォルトの名無しさん:04/10/30 21:05:36
Delphiって文字列ひっくり返せるから後方検索なくても大丈夫。
571デフォルトの名無しさん:04/11/07 21:04:26
Googleで「置換」を検索

もしかして: 痴漢
572デフォルトの名無しさん:04/11/07 21:32:26
Googleで「gooogle」を検索 → もしかして: google
Googleで「gooooogle」を検索 → もしかして: goole
Googleで「goooooogle」を検索 → もしかして: goooooooogle

というか、、goo・・・oogleという名前のサイトっていくつあるんですか?w
573デフォルトの名無しさん:04/11/14 16:21:06
なんとなく分かるんですがどうやって証明すればいいのか分かりません。

Show that there exists an algorithm for determining if L1 ⊆ L2, for any regular languages L1 and L2.
すべての正規言語L1とL2に対して
L1 ⊆ L2であるか確認できるアルゴリズムが存在することを証明せよ。

L1 ⊆ L2っていうのは大きな集合L2の中に小さな集合L1がすっぽり入った図でいいんですよね?
自分なりに考えると
L2 - L1の結果が空集合ΦならL2とL1は重なっていない、
L2 - L1の結果でL2が少し欠けた(でもその欠け < L1)場合はL2とL1は部分的に重なっている。
L2 - L1の結果でL2の欠けた部分=L1ならL1 ⊆ L2
…っていうのじゃダメですよね?
もっとスマートに証明する方法を教えて下さい。
574デフォルトの名無しさん:04/11/15 06:02:40
>>573
漏れもよく判らんけど、A⊆B ⇔ A∩B=A だから、

・L1,L2が正規言語ならL1∩L2も正規言語になることを示す。
・ふたつの正規言語が等しいか判断するアルゴリズムの存在を示す。

という方針で出来そうな気がする。
575デフォルトの名無しさん:04/11/15 06:57:15
ありがとうございます!

>A⊆B ⇔ A∩B=A だから、
あア、ナルほど!

>・L1,L2が正規言語ならL1∩L2も正規言語になることを示す。
これは7つのClosure Propertiesの中で示されている
(L=A∩BでABの両方が正規言語ならLも正規言語)ので
L1⊆L2 ⇔ L1∩L2=L1と読み替えた時点で
そのClosure Propertyを使って正規言語であることが証明できました。
これでやっと次の問題に逝けます。
本当にありがとうございました!
576デフォルトの名無しさん:04/11/16 23:55:35
そんなことも分からずに正規表現使ってる香具師がいたとは
恐れ入った・・・
577デフォルトの名無しさん:04/11/18 00:33:22
([ぬま][るん][ぽこ])+
578デフォルトの名無しさん:04/11/18 01:38:08
ぬるぽ
ぬるこ
ぬんぽ
ぬんこ
まるぽ
まるこ
まんぽ
まんこ
579デフォルトの名無しさん:04/11/18 03:22:01
緊急!
{ww: w∈{a, b}*}はRegular languageですよね?
{ww^R: w∈{a, b}*}はNon-regular languageというのは知っています。
580デフォルトの名無しさん:04/11/18 12:53:58
んなもん自分で表現してみれば分かるだろ
581デフォルトの名無しさん:04/11/18 13:08:25
緊急と書けばすぐ答えが返ってくると思ってるバカ
582デフォルトの名無しさん:04/11/18 15:16:02
Microsoftの緊急の脆弱性だって2ヶ月くらいパッチが提供されないこともあるのに
583デフォルトの名無しさん:04/11/18 19:27:36
>>579はOKWebにも投稿してるが、そっちでも無視されてる。
ttp://okweb.jp/kotaeru.php3?q_id=1089369
584デフォルトの名無しさん:04/11/19 00:18:39
─── /⌒ヽ, ─────────
 ̄ ̄  / ,ヘ  ヽ∠忍\  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   人 ガッ
 ̄ ̄ i .i \ 〜|/゚U゚|ヽ,   ___,, __ _ ,, - _― <  >__∧∩
── ヽ勿  ヽ,__ヾy//j  i~""     _ ― _ .V`Д´)/ ←>>578
______   ヽ,, / / __,,, -- "" ─ "ー   |    / 
───────  ヽノ ノ,イ  ─── ― -   / /\|
───────  / /,.  ヽ,  ──      //
______   丿 ノ ヽ,__,ノ ___ _ _ _
           j  i
_____    巛i~ ____ _

危うく見逃すところだった…。
585デフォルトの名無しさん:04/11/19 19:57:59
>>584
ム板でやるなハゲ
586デフォルトの名無しさん:04/11/20 04:21:53
>>585
ハゲてないわい祖チン
587デフォルトの名無しさん:04/11/20 15:52:17
>>586
そそそ、祖チンちゃうわ!
588デフォルトの名無しさん:04/11/22 15:11:45
589デフォルトの名無しさん:04/11/23 07:59:13
オライリーの、フクロウが表紙の正規表現の本って、内容いいかな?
立ち読みして調べたいんだけど、近くのショボい本屋には売ってないよー。
590デフォルトの名無しさん:04/11/23 08:33:51
正規表現の濃い使い方を知るにはよいと思う。
漏れは正規表現エンジンを作ろうとして買ったらいまいち役に立たなかった
591デフォルトの名無しさん:04/11/23 20:33:52
>>590
それは、使う人が欲する情報と、作る人が欲する情報が違うという
意味で受け取ってもよろしいか?
592デフォルトの名無しさん:04/12/01 13:01:42
あの本は、UNIX系の各種正規表現エンジンを使い分けなくてはならない人が読むべきものかも
593デフォルトの名無しさん:04/12/09 20:49:19
秀丸で
「 To: ******.**_**-**.@****.***.** 」
って行だけ残して全部消したいんだけど。。。誰か教えてくれませんか?
594デフォルトの名無しさん:04/12/09 20:51:45
>>593
で、どこまで試したの?
595デフォルトの名無しさん:04/12/09 20:56:54
正規表現自体が、全然素人でーー
596デフォルトの名無しさん:04/12/09 20:57:50
ここで聞けば出来るかも知れないって思って
>>595
597デフォルトの名無しさん:04/12/09 21:18:30
cat spamlist |grep "To:"
598デフォルトの名無しさん:04/12/09 21:19:05
そっか↓しかちんぐ
599デフォルトの名無しさん:04/12/09 22:19:48
ここ、プログラム板なんですけど。
初心者板じゃないよ。
600デフォルトの名無しさん:04/12/12 05:47:05
検索
+--------------------------+
|^(?!To:).*\n               |
+--------------------------+
置換
+--------------------------+
|                      |
+--------------------------+

…でいけるとおもったけど、ぜんぜん駄目だ…
なんでやーー!!
601デフォルトの名無しさん:04/12/15 15:25:02
置換文字列に
検索文字列を含むファイルの名称を指定するには
どうしたらいいんでしょう
602デフォルトの名無しさん:04/12/15 16:38:02
日本語講師とエスパーのダブル募集です。
603デフォルトの名無しさん:04/12/16 16:23:16
abc_def_ghi -> abcDefGhi

という風に _ を抜いて続く文字を大文字にしたいんですが
604デフォルトの名無しさん:04/12/16 16:30:31
>>603
そういうのはRuby
words = str.split(/_/)
words.each { |word| word = word.slice(0, 1).upcase + word.slice(1).downcase }
str = ""
words.each { |word| str = str + word }
605603:04/12/16 16:33:13
>>604 サンクスです

でもperlでやる必要が・・。

$hoge =~ s/_./\U$&/g;
$hoge =~ s/_//g;

という二段階にしないとダメ?
606デフォルトの名無しさん:04/12/16 17:08:49
>>605
s/_(.)/\U$1/g;
607デフォルトの名無しさん:04/12/16 17:28:24
Ruby以外は糞
608デフォルトの名無しさん:04/12/16 20:28:00
それはRuby信者も糞ということですか
609デフォルトの名無しさん:04/12/16 21:28:35
Perlあんまりにも漢字の扱いが酷くてRubyに乗り換えた。
信者うんぬん言う以前に実装の問題が...
610デフォルトの名無しさん:04/12/17 15:27:26
Perlのスクリプトに挑戦していて、壁にぶつかっています。
2-3
2 -3
2- 3
2 - 3
をまとめて 2--3にしたいのですが、
$hoge =~ s/(?<=[0-9](|\s*))-(?=(\s*|)[0-9])/--/g;
これではエラーになります。
どう書けばよいのでしょうか。
611デフォルトの名無しさん:04/12/17 16:36:27
$hoge =~ s/(?<=[0-9]\s*)-(?=\s*[0-9])/--/g;

と書きたいところだろうが、look-behindに可変長
文字列にマッチするパターンは使えないので、

$hoge =~ s/([0-9])\s*-\s*([0-9])/$1--$2/g;

あたりか。
612デフォルトの名無しさん:04/12/17 16:40:09
と思ったが、-の前後の\s*はこの場合消えなければならないので
数字一個なら固定長だった。これでいけるはず

$hoge =~ s/(?<=[0-9])\s*-\s*(?=[0-9])/--/g;
613デフォルトの名無しさん:04/12/17 17:05:21
>>611-612

$hoge =~ s/([0-9])\s*-\s*([0-9])/$1--$2/g;
でばっちりうまく行きました。数字は1個と限らないので、上の方を使います。
614デフォルトの名無しさん:04/12/17 17:17:48
>>613
数字の前後に\s*がつくと可変長だが数字だけなら固定長
という意味なので、上も下も数字をひとつしか見てない
のは同じ。

ちなみにベンチとると下のほうが倍近く速いよ(笑)
上の方が先読み使ってないから素朴でわかりやすいという
のはあるかもしれん。
615デフォルトの名無しさん:04/12/18 07:56:54
これで文句あるまい
s/(\d+) \s* - \s* (\d+)/$1--$2/xg
616デフォルトの名無しさん:04/12/18 08:01:26
…と思ったけど数字は結局1つしか見ないでいいのか。あほだった
617デフォルトの名無しさん:04/12/20 14:09:57
>>614
すいません、ベンチマークってどうやって取るんですか?
618デフォルトの名無しさん:04/12/22 02:36:15
Windowsで使えるPOSIXのregexp互換ライブラリってありませんか?
619デフォルトの名無しさん:04/12/22 02:49:18
c++で正規表現使うにはどうすればいいんですか?
620デフォルトの名無しさん:04/12/22 03:04:17
boost::regex使え。
621デフォルトの名無しさん:04/12/22 03:41:14
>>618
PCRE や Oniguruma の POSIX 互換 API を使ってみるとか。
622デフォルトの名無しさん:04/12/23 23:49:25
How to WSDL convert to SOAP?
623デフォルトの名無しさん:04/12/24 19:45:52
>622
まずは英文法を覚えろ。話はそれからだ。
624デフォルトの名無しさん:04/12/29 13:35:41
javaを使用しています。

改行以外の任意の1文字は、正規表現では
.
となりますが、
改行を含める場合はどのような記述になるのでしょうか。



625デフォルトの名無しさん:04/12/29 13:44:12
(?:.|\n)が安全牌かな。
626デフォルトの名無しさん:04/12/29 14:44:37
>>625
わわ、すばやいレスありがとうございます。

期待どおりの結果が得られました。

?:
といる記述ははじめてお目にかかりました。
後追いですが、意味を調べて理解しておきます。

ありがとうございました。

627デフォルトの名無しさん:04/12/29 18:43:41
>>625
ダ、ダメでした。
\rがスルーされてしまいます・・・(T_T)
悲しいです〜(ToT)
628デフォルトの名無しさん:04/12/29 18:51:11
WSDL:プロシージャのI/F定義
SOAP:プロシージャコール

と思った場合変換も減ったくれも無いと思った。
629デフォルトの名無しさん:04/12/29 19:57:19
>>624
漏れは Perl だと [\s\S] をよく使うけど、これじゃダメ?
630デフォルトの名無しさん:04/12/29 20:20:16
631デフォルトの名無しさん:04/12/29 20:40:16
perlならsオプション・・・・
632デフォルトの名無しさん:04/12/30 00:09:31
javaで円マークとマッチさせたいだけなのに、、、できない。

\\

じゃ駄目なのですか?
633デフォルトの名無しさん:04/12/30 00:11:35
C,C++で使用可能なライブラリ紹介してちょんまげ
よろぴこー
634デフォルトの名無しさん:04/12/30 00:11:39
\\\\
635デフォルトの名無しさん:04/12/30 00:19:20
boost::regex
636デフォルトの名無しさん:04/12/30 00:38:42
>>634
まじですか。
\\\\
できました。
すげー。ありがとうございます。
637デフォルトの名無しさん:04/12/30 00:41:33
638デフォルトの名無しさん:04/12/30 03:30:16
Perl互換はPOSIX互換じゃありまへん。
そこんとこ一つよろしく。
639デフォルトの名無しさん:04/12/30 16:20:30
>>638
PCRE の POSIX 互換 API って実は互換でないの?
640デフォルトの名無しさん:04/12/30 17:42:50
POSIXは完全に全てのパターンを*もれなく*検査して
最終的にもっとも長いマッチを抽出するけど、
Perl系は途中で検査を打ち切る。
この動作を嫌う人はイヤなんだよね。
641WZエディターで:05/01/02 19:24:05
置換を使って、
\tと\nの間にある、ランダムな文字、数字を消したいんですが、
どうしたらいいですか?
642デフォルトの名無しさん:05/01/02 19:28:53
「特定の文字列以外」を別の何かに置換したいのですが
どうすればよいのでしょうか?

たとえば
hagehogehige から「hoge」だけを残して全て「a」にして
aaaahogeaaaa のようにする場合、などです
643デフォルトの名無しさん:05/01/02 20:28:57
641
\t[^\t\r\n]+\n
→\t\n
644デフォルトの名無しさん:05/01/02 20:31:47
642
([^h]|h[^o]|ho[^g]|hog[^e])*
645641:05/01/02 20:42:06
有り難うございます。しかし、出来ません。 >>643
646デフォルトの名無しさん:05/01/02 20:46:34
>>642
言語に依存するけど、とりあえずhogeにマッチさせてpreとpostだか位置情報使うとか。
647デフォルトの名無しさん:05/01/03 09:34:09
>645
何の正規表現? 複数行サポートしてる?
648641:05/01/03 13:00:11
>>643>>647
すみません。 出来ました。 置換ウインドウの正規のポッチを押のを忘れてました。
が、しかし、リクエストを変えます。

置換を使って、
\tと\nの間にある、ランダムな文字、数字、空白、記号、を消したいんですが、
どうしたらいいですか?
649641:05/01/03 13:02:19
つーか、\t[^\t\r\n]+\nだと、
ACIDTECHNO 160BPM BASS 4.zip
は、検索に引っかかるのですが、
ACIDTechno Club Grooves.zip
は、検索にひっかからないのです。
650641:05/01/03 13:04:05
つーか、\t[^\t\r\n]+\nだと、
ACIDタブTECHNO 160BPM BASS 4.zip改行
は、検索に引っかかるのですが、
ACIDタブTechno Club Grooves.zip改行
は、検索にひっかからないのです。
651デフォルトの名無しさん:05/01/03 13:21:24
少しぐらい自分で考えようとか思わないのかね。
\t[^\n]+\nなり\t[^\r\n]+\nを試してみれ。
652641:05/01/03 14:09:44
それもダメでした。  >>651
で、 \t[^痺]+\n ってマズ使われないであろう、漢字をいれたら、
うまく行きました。 WZエディターが変なのかな?
653デフォルトの名無しさん:05/01/03 15:51:19
やっとソフト名が出たよ。やれやれ。
654デフォルトの名無しさん:05/01/03 15:56:57
志村、>>641>>641
655デフォルトの名無しさん:05/01/03 18:43:08
>>652
>>653 みたいな奴もいるから、今後はソフト名は本文にも書こうな。
656デフォルトの名無しさん:05/01/05 01:14:16
VxeditorというBREGEXP.DLLを用いた正規表現が使えるソフトにおける話です。
十分な改行のみが含まれるテキストファイルにおいて、\n\nは思ったようにヒットするのですが、
\n\n\nのように3つ以上続けると全くマッチしません。これは何故なのでしょうか、ご教授ください。
657デフォルトの名無しさん:05/01/06 15:15:44
"2十円"を"20円"に変換するような正規表現の置換えを組みたいのですが
$aaa = "2十円";の場合

$aaa =~ s/([2-9])十/\10/; とか
$aaa =~ s/([2-9])十/\1\0/; では後方参照と認識されて上手くいきません
後方参照+半角数字を置き換えられる方法を教えてください
658デフォルトの名無しさん:05/01/06 15:40:43
perlなら

$aaa =~ s/([2-9])十/${1}0/; 
659デフォルトの名無しさん:05/01/06 15:46:25
>>658
ありがとうございます。無事置換え処理ができました
660デフォルトの名無しさん:05/01/09 12:33:04
質問です
例えば
def method():
とあった場合に、”method”の部分のみを検索するには
どのような式になりますか?
661デフォルトの名無しさん:05/01/09 12:39:09
method
662660:05/01/09 12:44:51
すまん説明が足らんかった...orz
その他にも
def aaaaa():
def bbbbb():
などがあって、要は”def”と”()”の間のみを取りたいんです
663デフォルトの名無しさん:05/01/09 12:45:55
def\s([^(]+)\(\)\:
664デフォルトの名無しさん:05/01/09 14:33:35
def\s(.+?)\(.*?\):
665デフォルトの名無しさん:05/01/12 12:06:59
666デフォルトの名無しさん:05/01/13 21:10:25
プログラムも正規表現も素人なんですが
サクラエディタの正規表現置換で単語の先頭を大文字、その他を小文字
としたいのですが

検索文字列は  ([0-9a-zA-Z'{]+)
で単語を拾えるのですが
置換文字列は  \L\u\1

だと変換できません、単にLやuが入るだけです。

それではと思いTerapadの正規表現プラグインの置換文字列

<\1>>\2<

と言うのも使ってみましたが無理でした。

サクラエディタのスレでも聞いたのですが、詳しい方が居ないようです。
マルチになってしまいますが、2日ほど開けたのでお許し下さい。
正規表現のサイトもいくつも見たのですが、
検索文字列はいくつも書いてあり、参考になりましたが
バカなのか置換文字列に関することを見つけ切れませんでした。

よろしければ、どなたか詳しい方解説お願いします。
667666:05/01/13 21:12:11
あ、terapadでの検索文字列

([0-9a-zA-Z'])(\a*)

というのでも試してみました。
668666:05/01/13 21:14:46
連投申し訳ありません。
terapadでは前出の方法で英単語の頭を大文字、その他を小文字に置換できます。


I'M NOT IN lOVE, SO DON'T FORGET IT
が↓
I'm Not In Love, So Don't Forget It
669デフォルトの名無しさん:05/01/13 23:02:25
正規表現はあくまでパターンマッチングなので、
その後どう処理するか(この場合は単語のキャピタライズ)は処理系依存になります。

PerlやEmacsなどの定番ツールなら別だろうけど、ここでじゃなく
エディタの専用スレもしくは掲示板の方が回答を得られるんじゃないかな。
670デフォルトの名無しさん:05/01/14 14:05:45
>>669
そうだったのですか、
ありがとうございました。
671デフォルトの名無しさん:05/02/02 14:45:13
正規表現で条件を二つ重ねることって出来ませんか?
正規表現1 && 正規表現2
みたいなかんじで。
672デフォルトの名無しさん:05/02/02 15:17:15
>>671
処理系によっては可能かもしれない。

#!/usr/local/bin/ruby
require "eregex"
p "foobar" =~ /foo/ & /bar/
673デフォルトの名無しさん:05/02/02 17:18:06
処理系によっては可能かもしれない。

perl の場合:

(?=foo)bar
674デフォルトの名無しさん:05/02/02 17:44:29
正規言語と正規言語の積は正規言語っしょ?
それを受理するオートマトンは、
2つのオートマトンの状態の積を作ればよい。

いや、なんとなく専門用語を並べてみただけ。実はよく知らん。
675デフォルトの名無しさん:05/02/06 10:46:33
>>674
欲しいのはマッチした結果の論理積だから無理だろ。
676デフォルトの名無しさん:05/02/09 20:28:22
正規表現エソジソを作るのに参考になるお勧め書籍あります?
677デフォルトの名無しさん:05/02/10 01:04:52
boost::regexのソース。
678デフォルトの名無しさん:05/02/10 04:12:32
は糞
679デフォルトの名無しさん:05/02/10 06:06:59
            _       ___ ∧∧       _        人人人人人人人人人人
        /⌒\ \     〔〔 |Ξ (,,゜Д゜)つ /⌒^\\    <               >
        //⌒\ |◎|   _/ ||Ξ/ つ¶¶  / /⌒\|◎|   <   はくそリーナへ
      /     )|日|\/__\|/ ̄ ̄ ̄ ̄\  _____.|日|\_  <              >
     /  ●   ___  \|/       ●  ●/\  ̄\__〉  ∨∨∨∨∨∨∨∨∨∨
   /      Y     Y )ヽ Y  Y       \..\ _/^~           /^|/^|__
   | ▼       |     | /. )).|   |       ▼ |/\\              /^/.^/_⊃
   |_人__ノ⌒|     |/ノノノ\__人   、_人_|    \\______ __/^/^/^/⊃
          / ̄ \__|  ||  ̄/目>、 ___ノ\.   /| ̄    |  ̄  ̄ ||γ〜〜〜 |
         /   /  ./|___||_/ ̄/{三|三|三}|    \/|||‐‐‐‐‐‐\  ⊂二⌒) γ  /
        /__/_./ \_|ロ/ ̄{三|三|三}ロ|      ^^|____\_||{ ヽーー/
      /   /  |/     〉−−−−−〈_             ̄ ̄ ̄ ̄ ̄ ̄
      /======/   |   / ̄ ̄ ̄|^^ ● ^^ ●)\
    /~/⌒|\.||  /   | ̄ ̄__|_   ▼  |  ̄|
  ( ̄()|⌒| )|| /    /   / /ミ三\_人__/三{.|
  ( ̄()|_|/ ||/     /   / / /   ̄/|:::::|::::|   \
  ( ̄()/)/ ̄     /    / / /   ./ |:::::|::::|\   \
   ^( ̄)/        /__/_/ /    /  \__/  \   \
     ̄^             /^^ /   /   \    \ | ̄ ̄|
                   /   /   /       \    /    |
                 __/三|/   /         >三三\___/
               / \/ ̄ ̄〉         /\  /  /
             /\   |__/|         /  | /  /
           /   | /     /        /   |_/ __/
680デフォルトの名無しさん:05/02/11 15:15:23
Cで使える小さな正規表現ライブラリ(500行ぐらい)を探していて
http://tiny-rex.sourceforge.net/
これを見つけたんですが、結果がおかしいです。

"xxxxxxx"に対して"(x{1,5})xx"を検索すると結果は、
[0]xxxxxxx
[1]xxxxx
match! 2 sub matches

となりましたが、おかしいですよね?ちなみにサンプルはいじっていません。
あるいは、どこかにこれと同じぐらい小さいライブラリってないでしょうか。
機能はある程度削ってあってもいいので。
681680:05/02/11 16:44:37
すいません、よく解説を読んだらこれでいいみたいです。
[0]は正規表現にマッチする部分全てで、
[1]以降は( )でくくった部分正規表現の結果が入るということでした。
682デフォルトの名無しさん:05/02/12 12:58:41
正規表現エンジンのオーソドックスな実装ってどんな感じ?
683デフォルトの名無しさん:05/02/12 15:39:28
それは、車輪の再発め(ry
684デフォルトの名無しさん:05/02/12 16:33:48
>>682
直上にある実装よめよ
685デフォルトの名無しさん:05/02/12 18:13:14
>>682
Henry Spencer タンのやつとか
686デフォルトの名無しさん:05/02/19 03:42:00
WZエディターV5の置換を使います。
1,"Hiphop1","ACID"
4,"Xtortion","mp3"

といったフィールドが3つのcsvファイルです。これを、
(ACID) Hiphop1 CD1
(mp3) Xtortion CD4
と変化させたいです。
どうしたらいいでしょうか? 教えて君ですみません。 よろしくお願いします。
687デフォルトの名無しさん:05/02/19 03:48:12
あと、すれ違いなのですが、
(ACID) Hiphop1 CD1
(mp3) Xtortion CD4

と、100行並んだファイルから、
(ACID) Hiphop1 CD1.txt
(mp3) Xtortion CD4.txt
(中身はなにかが書いてあっても、書いてなくてもどちらでもよい)
といった、テキストファイルを100個作るにはどうしたらいいでしょうか?
688デフォルトの名無しさん:05/02/19 03:49:21
perlかなんかでスクリプト書け。そっちのほうが話が早い。
689デフォルトの名無しさん:05/02/19 03:57:31
perlなんて本屋さんで見かけますが、まったく知りません。
690686:05/02/19 04:36:20
(^.*),
これで、フィールド1の最初の数字が変数1に抽出できますか?
691686:05/02/19 04:51:34
検索 ^([0-9]*),
置換  CD$1
なんてやってもうまくいきません。 ()が閉じていない、などとおこられます。
692デフォルトの名無しさん:05/02/19 11:05:35
>>691
WZ5でそのまま置換できたぞ?
どこで()でなんとかって怒られるんだ?
マクロか?
693686:05/02/19 20:43:32
>>692
WZ5の置換タブを開き、正規のポッチを押して

検索には ^(.+),"(.+)","(.+)"
置換には (\3) \2 CD\1

で、OKを押すと
「正規表現 ()が閉じていません」
とゆうエラーメッセージが6回出てきます。
694デフォルトの名無しさん:05/02/19 22:15:49
>>693
うちのWZ5ではそのままでできた。
君んとこのWZの問題だろう。
695686:05/02/19 22:17:49
>>688
>perlかなんかでスクリプト書け。そっちのほうが話が早い。
じゃあ、WZエディタはあきらめて、perlでやることにします。
取りあえずは、ActivePerlをダウンロードしてインストールすればいいんですか?
http://www.rfs.jp/sitebuilder/perl/08/02.html
696686:05/02/19 22:20:32
>>694
了解しました。 多分どこかの設定が悪いのかもしれません。
697デフォルトの名無しさん:05/02/20 17:37:51
「じゃあその手段でやってやるからとりあえず手順を教えろ」か…。
698686:05/02/20 19:01:48
へへっ、つーかWZ5を再インストールしたら、>>693のやり方でばっちり出来ました。
ちなみに、>>693ぐらいが書けるのは、正規表現の入門者、初級者、中級者、
のどのへんでしょうか?

これで、>>696の問題は解決したのですが、>>687はWZ5のマクロでやろうと思います。
2ch内にWZマクロのスレッドなんてないでしょうか?
699デフォルトの名無しさん:05/02/20 20:48:01
>>698 ありません
700デフォルトの名無しさん:05/02/24 22:45:45
宜しくおながいしますプログラミング言語はPerlです
これ何とか短く書く方法教えて下さい

これ何とか短く書く方法教えて下さい

$_ = "$in{'arg_0'}<>$in{'arg_1'}<>$in{'arg_2'}<>$in{'arg_3'}<>$in{'arg_4'}<>$in{'arg_5'}<>$in{'arg_6'}<>$in{'arg_7'}<>$in{'arg_8'}<>$in{'arg_9'}<>$in{'arg_10'}<>\n";
701デフォルトの名無しさん:05/02/24 22:52:20
$in の設計から見直してみるのも一興かと。
702デフォルトの名無しさん:05/02/24 23:16:36
>>701
ていいますと?
703デフォルトの名無しさん:05/02/24 23:35:40
>>702
あ、いや、すまんす、題意を勘違いしてた。
というか、質問の意味がわからんのだけど、これと正規表現とどう関係が?
704デフォルトの名無しさん:05/02/24 23:49:15
$in{'arg_0'}<>という繰り返しが何度も出てくるので、正規表現を使って短く書く方法があれば、教えていただきたく思い質問させてもらいました。
正規表現では無理なんですか?
705デフォルトの名無しさん:05/02/25 00:57:23
やれやれだ。
706デフォルトの名無しさん:05/02/25 01:19:20
>>704
繰り返し構文でも使っとけ
707デフォルトの名無しさん:05/02/25 11:12:05
>>700
Perlコーディング初心者質問スレ Part 40
ttp://pc5.2ch.net/test/read.cgi/php/1106816922/l50
708デフォルトの名無しさん:05/03/02 14:15:08
test1 = '111' test2 = '222' test3 = '333'
で、111と222を取り出したい場合
検索と置換にはどう書けばいいんでしょうか
709デフォルトの名無しさん:05/03/02 15:07:26
>>708はマルチ
710デフォルトの名無しさん:05/03/19 17:30:45
正規表現が勉強できるサイトを教えてください
711デフォルトの名無しさん:05/03/19 20:12:49
712デフォルトの名無しさん:05/03/20 08:05:55
偶数回(0回を含む) / が出現した直後の単語を抽出することは可能でしょうか?
713デフォルトの名無しさん:05/03/20 08:18:37
最短マッチにしたうえで
(([^/]*)|.*/.*/(.*))で$2と$3を取り出すとか適当なことを言ってみる
714デフォルトの名無しさん:05/03/20 22:51:14
前方に「/」が無い「//」の連続(つまり、「/」が偶数個)の後の、単語構成文字の連続、って感じかなぁ。

(?<!/)(?://)+(\w+)

状況がよく分からないので細かいところは適当にいじってくれ。
715デフォルトの名無しさん:05/03/20 23:01:47
<id="id" property="prop" text="text"/>
こういうタグがあったとしてproperty="prop"の""内が全て英小文字かって
どう書きますか?
716デフォルトの名無しさん:2005/03/21(月) 10:24:59

エイホ、ウルマン、セシィの「コンパイラ 原理・技法・ツール」を読んでいてふと疑問に思ったのですが、
正規表現からは機械的に有限オートマトンを構成できますが、
逆に有限オートマトンから機械的に正規表現を構成する方法っていうのはありますか?
「この本読めば載ってる」とかでよいので、情報があったらよろしくお願いします。
717デフォルトの名無しさん:2005/03/21(月) 11:10:22
>>716
> 逆に有限オートマトンから機械的に正規表現を構成する方法っていうのはありますか?
あります。

> 「この本読めば載ってる」とかでよいので、情報があったらよろしくお願いします。
シプサーとか。
718デフォルトの名無しさん:2005/03/21(月) 21:36:01
>>717
レスありがとうございます。

↓これですよね、多分。。。

計算理論の基礎 共立出版 マイケル シプサ (著)

719デフォルトの名無しさん:2005/04/04(月) 18:35:48
質問します

perl5.0で携帯から、絵文字入力があったばあい(バイナリ16進で4桁)に、それを検知して
s-jisの(アスキー文字の16進4桁)に変換したいのですが、
下記の、正規表現でできると聞きました。実際に使用するとうまく変換されているようなのですが、
なぜこれで変換できるのかわかりまえん。わかるかたおながいします

s/\G((?:[\x80-\x9F\xE0-\xF2\xF4-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF])*)([\xF3]
[\x40-\x7E\x80-\xFC])/$1.'['.unpack('H4', $2).']'/ego;


720デフォルトの名無しさん:2005/04/04(月) 20:20:19
regexp自作した人いる?
721デフォルトの名無しさん:2005/04/04(月) 20:43:42
またアンケートか?
722デフォルトの名無しさん:2005/04/04(月) 22:12:14
>>721
俺も作ってみたいんだよね。
教科書は読んだけどそれだけじゃ足り無そうだからさ。
723デフォルトの名無しさん:2005/04/05(火) 03:48:40
先月作ってた。wchar_t決めうちのだけど。
事前に思ってたほどには難しくなかった。NFA、DFA、オートマトン、
このあたりのキーワードさえ押さえておけば、一通りの機能は
実装できると思う。
配布されているライブラリ並みに高速化を図ろうとすると、
ちと苦労するかもしれんけど。

自分で実際に作ってみると、検索効率の良い正規表現と悪い表現とが
身に染みて分かるので、なかなかいい勉強になった。
724デフォルトの名無しさん:2005/04/05(火) 08:24:20
>>723
wchar_t決めうちってことはNFAになるのかい?
それとも教科書的でない方法を使えばDFAでも実装できるのかな?
作ったものは公開してないの?
725デフォルトの名無しさん:2005/04/05(火) 13:08:49
>>724
そう>NFA
公開は今のところしてない。それほど秀でたものでもないんで…
726デフォルトの名無しさん:2005/04/06(水) 07:15:18
>>725
そおか。
しかし、教科書の次に行くのに参考になるものが無いような気がするので、
作り始めのソースなんておいしそうなんだけどなぁ。
ほしい人たくさんいそうな気がする。
俺もほしいけど。
機能満載で技巧凝らしたようなソースになっちゃうと読むのが難しいよ。
727デフォルトの名無しさん:2005/04/06(水) 07:28:12
そういうことなら、この辺が参考になるかも。
ttp://www2.starcat.ne.jp/~fussy/algo/algo7-5.htm
ttp://www2.starcat.ne.jp/~fussy/algo/algo7-6.htm

7-6のほうには、ソースを固めたzipも置いてあるんで、色々参考になるかと。
728デフォルトの名無しさん:2005/04/06(水) 08:06:50
>>727
ありがと。
ちょっと難しいね。
ビットマスクになってる部分を動的配列にすると日本語も使えるようになるのかな?
そんな簡単じゃないんだろうか?
729デフォルトの名無しさん:2005/04/06(水) 09:45:15
>>728
自分が使ったのは、文字コードの範囲を動的配列に押し込んでゆくという方法。
[0-9@]なら、0x0030-0x0039, 0x0040-0x0040という具合に。

ただビットシフト+マスクを使う方法に比べると、if文を通る回数が増える分、
速度の点ではやっぱり不利。
何かうまい文字クラスの扱い方があればいいんだけどねえ。なかなか思いつかなくて。
730デフォルトの名無しさん:2005/04/10(日) 01:14:41
正規表現って 規格ありますか。 ANSIやPOSIXとか。
731730:2005/04/10(日) 01:26:42
>>730
自己レス。
POSIX 1003.2 
・Basic Regular Expression
・Extended Regular Expression
732デフォルトの名無しさん:2005/04/20(水) 12:22:27
ある正規表現が与えられた時、
それにマッチするものが(例えば) "a" から始まる文字列の中にのみあるか、
そうとは断定できないか判定する方法はないでしょうか?
733デフォルトの名無しさん:2005/04/20(水) 13:23:44
>>732
マッチする関数やメソッドに (例えば) "a" から始まる文字列を実際にくべてみる。
734デフォルトの名無しさん:2005/04/20(水) 16:19:15
うーん、マッチングを試みる対象を事前に絞り込めたら
嬉しいのですが。
735デフォルトの名無しさん:2005/04/20(水) 17:06:48
>>730
自作するのなら、ECMAScriptのそれに倣うという手も。
確かboost::regexもそうだったはず。
736デフォルトの名無しさん:2005/04/20(水) 18:19:33
>>734
どういう用途なの?
737デフォルトの名無しさん:2005/04/20(水) 20:10:59
>>736
事前に辞書順にソートされてるファイルに対しマッチングをしたいのです。
ちなみに与えられる正規表現が "^" から始まる事は保証されています。
738デフォルトの名無しさん:2005/04/20(水) 20:23:27
んじゃ^の次が何かを調べれば最初の一文字がどうなのか一発で分かるだろ
739デフォルトの名無しさん:2005/04/20(水) 21:06:56
^[a-f]?[x-z]?
740デフォルトの名無しさん:2005/04/20(水) 21:22:07
>>732
まず、よほど速度が気になるのでない限り、何も考えず普通にマッチを試した
方がいいと俺は感じる。(正規表現とは無関係なソフトウェア工学的センスの話だけど)

で、ふつう、マッチする最初の1個を調べる作業は、ファイル全体を調べるよりは
効率がいいよね?もしこれが>>732のケースでも成り立っているなら、...

1. 一番最初にマッチするもの一個のみを調べる。その行番号L1を覚えておく。
2. ソートされたファイルを、上下逆順に並べ替える(or逆順にソートする)。
3. 逆順のファイルに対して、一番最初にマッチする行の行番号L2を覚えておく。
4. N1〜(全行数-N2+1)までをsedとかで切り出して、その間で本当のマッチング。

する戦略は、候補のひとつだと思う。
741740:2005/04/20(水) 21:23:31
あ、typoスマソ。L1==N1、L2==N2ね。
742デフォルトの名無しさん:2005/05/16(月) 10:16:17
保守
743デフォルトの名無しさん:2005/05/30(月) 21:15:59
age
744デフォルトの名無しさん:2005/05/31(火) 00:40:23
行頭と行末にダブルクォーテーションを1つずつ付けたいのですが、
正規表現ではどのようにすればよいでしょうか。
745デフォルトの名無しさん:2005/05/31(火) 02:43:49
>>744
フォーマットなら環境依存。エディタならそのエディタを書いたほうが吉。
746デフォルトの名無しさん:2005/05/31(火) 03:49:17
>>744 が使ってるのが Perl なら俺はエスパー。
$text =~ s/^(.*)$/"${1}"/gm;
747デフォルトの名無しさん:2005/05/31(火) 07:10:23
>>745-746
すいません。秀丸エディタなのですが、${1}の部分を
どう表現すればいいのかが分からないのです。
748デフォルトの名無しさん:2005/05/31(火) 08:00:56
>>746
プゲラ
749746:2005/05/31(火) 12:42:46
orz
750デフォルトの名無しさん:2005/06/01(水) 00:03:51
ある文字列のある語(複数)を置き換えた上で複写したいのですが、
どう書いたらいいでしょうか?Java です。

処理前
abc@def@abc

この文字列の abc を ABC にして複写。

処理後
abc@def@abc ABC@defABC
751デフォルトの名無しさん:2005/06/01(水) 10:36:44
>>750
何も難しいことはないと思うんだが、何がわからなかったんだろう。

String one = "abc@def@abc";
String another = one.replaceAll("abc", "ABC");
752747:2005/06/01(水) 20:41:54
すいません。いまだに自己解決できないので
どなたかお願いします。
753746:2005/06/01(水) 20:59:37
>>752
「秀丸 正規表現」でぐぐったらこんなの出てきたよ。
http://www.shuiren.org/chuden/teach/hidemaru/seiki/02.htm
754デフォルトの名無しさん:2005/06/02(木) 03:25:14
>>751
それだと、
処理前
abc@def@abc

処理後
ABC@defABC
ですね。

ではなくて、
処理後
abc@def@abc ABC@defABC
にしたいのです。
755デフォルトの名無しさん:2005/06/02(木) 04:35:36
>>754
ヒント
back reference (前方参照) ※>>74
756デフォルトの名無しさん:2005/06/02(木) 10:30:48
Cで性器表現を扱えるライブラリはありませんか?
757デフォルトの名無しさん:2005/06/02(木) 11:59:48
>>754
ああ、なるほど。
でも、>>751 の後 one + " " + another で文字列繋げりゃいいだけでは?
(「@」の扱いがよくわからんが)
758デフォルトの名無しさん:2005/06/02(木) 14:16:38
>>756
flex
759デフォルトの名無しさん:2005/06/02(木) 16:33:48
>>756
flexは字句解析用。それ向きに正規表現を使うならいいけどさ。

正規表現のマッチとかだけを扱いたいならregex(3)あたりでしょ。
re_comp(3),re_exec(3)という関数名だったり、regcomp(3),regexec(3)...
という関数名だったりするから、その辺でmanしてみ。

regexという同じ呼び名で、違うバージョン違う仕様のものが
多数あるから注意してね。つうか、詳しい人解説よろ。
760デフォルトの名無しさん:2005/06/02(木) 18:02:27
>>756
ANSI標準には含まれてない。
761デフォルトの名無しさん:2005/06/02(木) 19:46:16
boost::regexにはPOSIX互換のインタフェースもついてて
それのwchar_t版もあるから、日本語使うには便利だよ

まあ大概の正規表現ライブラリにはPOSIX互換インタフェース
ついてるけどね
762デフォルトの名無しさん:2005/06/02(木) 19:49:45
>>761
「Cで」
763デフォルトの名無しさん:2005/06/02(木) 19:58:04
ああ、それなら鬼車とかいいんじゃないの。MBCS対応で、
Rubyとかでも使われてる正規表現エンジンだよ。
764デフォルトの名無しさん:2005/06/02(木) 20:10:44
普通PCRE
765デフォルトの名無しさん:2005/06/02(木) 20:13:13
PCREってUTF-8になんちゃって対応してる程度だから日本語で使うのはどうよ
って雰囲気だったのだが、最近は違うの?
766デフォルトの名無しさん:2005/06/03(金) 01:18:17
鬼車、VC7との組み合わせマンドクサ。
make clean;make;make clean; makeの繰り返し

#define ONIG_EXTERN extern // use static link
#ifdef _MSC_VER /* Visual C++:autolink */
#if defined(_MT) && defined(_DLL) && defined(_DEBUG) /* /MDd */
#pragma comment(lib, "onig_s_mdd.lib")
#elif defined(_MT) && defined(_DLL) && !defined(_DEBUG) /* /MD */
#pragma comment(lib, "onig_s_md.lib")
#elif defined(_MT) && !defined(_DLL) && defined(_DEBUG) /* /MTd */
#pragma comment(lib, "onig_s_mtd.lib")
#elif defined(_MT) && !defined(_DLL) && !defined(_DEBUG) /* /MT */
#pragma comment(lib, "onig_s_mt.lib")
#elif !defined(_MT) && !defined(_DLL) && defined(_DEBUG) /* /MLd */
#pragma comment(lib, "onig_s_mld.lib")
#elif !defined(_MT) && !defined(_DLL) && !defined(_DEBUG) /* /ML */
#pragma comment(lib, "onig_s_ml.lib")
#else
#error compiler option
#endif
#endif
767デフォルトの名無しさん:2005/06/03(金) 01:20:37
Makefileぐらい自分で書き直せばいいだろ
768デフォルトの名無しさん:2005/06/03(金) 01:23:37
フツーにmake書けばどのランタイムを使用してもサフィックスは全部.obj
makeだとかなりバッチ風になっちまうんでbjamみたいな方向がいいかも。
769デフォルトの名無しさん:2005/06/03(金) 06:11:50
>>753
ありがとうございます。やっとできました。
770デフォルトの名無しさん:2005/06/04(土) 08:41:41
Cで書かれた小さい正規表現ライブラリを探しています。
ソースが10KBぐらいのものでありませんか?
771デフォルトの名無しさん:2005/06/04(土) 11:37:40
ありません。
772デフォルトの名無しさん:2005/06/04(土) 12:40:44
ワイルドカード用なら小さいのが沢山あるけどな。ファイル名の”*”の処理のやつ。
773デフォルトの名無しさん:2005/06/04(土) 13:32:40
>>771
どういう調査をしてその結論に達したのか報告書を
まとめてください。
774デフォルトの名無しさん:2005/06/04(土) 23:45:05
見ず知らずの奴のためにそこまでしなければならない理由を完結に述べよ。
775デフォルトの名無しさん:2005/06/05(日) 09:22:43
>>774
イヤならいいですよ。ただあなたの発言に信頼性がないというだけの話ですから。
776デフォルトの名無しさん:2005/06/05(日) 09:29:17
>>774にとってはイヤだからやらないと思われた方がいいんだろうな。
本当はイヤだからじゃなくて能力の問題だから。
777デフォルトの各無しさん:2005/06/05(日) 15:08:21
急速にスレの質が低下してまいりました
778デフォルトの名無しさん:2005/06/05(日) 15:18:17
いや別に変わって無いけど……
779デフォルトの名無しさん:2005/06/07(火) 00:33:44
>>770

T-Rex a tiny regular expression library
ttp://tiny-rex.sourceforge.net/

これが結構小さいよ。
それだけに機能が限定されてるけどね。
780デフォルトの名無しさん:2005/06/08(水) 07:54:15
http://www.aihara.co.jp/~taiji/rege/は
-rw-r--r-- taiji/nobody 4689 1998-12-17 20:38:09 rege-0.51/rege.h
-rw-r--r-- taiji/nobody 45180 1998-12-17 22:01:50 rege-0.51/rege.c
-rw-r--r-- taiji/nobody 2268 1998-12-15 18:09:18 rege-0.51/escs.h
781デフォルトの名無しさん:2005/06/22(水) 15:30:28
これを簡単に書くにはどうすればいいんでしょうか?
ちなみの改行が何行あるかはまちまちなんですが。

%s/【項目】.*\n.*\n.*\n.*\n.*\n.*\n.*【/【/
782デフォルトの名無しさん:2005/06/22(水) 19:57:31
s/【項目】.*【/【/s
783デフォルトの名無しさん:2005/06/24(金) 22:36:23
IPアドレスが抽出できません、、
どうやればいいんですか?
784デフォルトの名無しさん:2005/06/24(金) 22:44:16
>>783
RFC3986 に載っている ABNF から、君の使っている
実装にあった正規表現を起こせばいいんじゃないかな。

ftp://ftp.rfc-editor.org/in-notes/rfc3986.txt
785デフォルトの名無しさん:2005/07/17(日) 14:38:40
質問です。

テキストの文字列置換が出来るソフトで正規表現を使い、
以下のように変換したいんです。

変換前   変換後
ABCD → 12C3
BCDE → 45D6
CDEF → 78E9

3文字目など、特定の場所を変換したくないんです。

テキストの文字列置換で比較的気に入ったのを見つけたんですが、
正規表現の使い方でうまくいきません。
AWK等の正規表現が使えるようなんですが…。
どなたかアドバイスお願いしますm(__)m

ttp://www.vector.co.jp/soft/win95/util/se114391.html
786デフォルトの名無しさん:2005/07/17(日) 15:21:25
>>785
正規表現でやることじゃない気がするな
787デフォルトの名無しさん:2005/07/17(日) 17:06:15
>>786
無理ってことでしょうか?
788デフォルトの名無しさん:2005/07/17(日) 17:15:27
マルチだから教えてやんない
789デフォルトの名無しさん:2005/07/17(日) 17:25:30
>>788
マルチ?
790デフォルトの名無しさん:2005/07/17(日) 21:04:15
うん。マルチ
791デフォルトの名無しさん:2005/07/17(日) 21:09:22
マルチだから教えないとかじゃなく
単に分からないだけかと思われw
792デフォルトの名無しさん:2005/07/17(日) 21:24:01
別のスレで既に解答でてるはずだが
793デフォルトの名無しさん:2005/07/17(日) 21:28:17
正規表現も知らない池沼が常駐するスレでつね
794デフォルトの名無しさん:2005/07/17(日) 21:38:47
文江
795デフォルトの名無しさん:2005/07/17(日) 21:42:06
文枝
796デフォルトの名無しさん:2005/07/17(日) 22:51:04
>>790
同じような質問がhttp://pc8.2ch.net/test/read.cgi/tech/1120720976/
でありましたけど、、、

全然回答になってません(汗

やはり正規表現では無理ってことですか?
797デフォルトの名無しさん:2005/07/17(日) 23:12:32
>>785
通常の正規表現を使った置換では難しいだろ。

簡単に考えて
(a-1)変えたくない文字を使われてない文字やパターンに一旦置換しておいて、
(a-2)変換を施して、
(a-3)(a-1)でやった置換を元に戻す

とか、
(b-1)変えたい部分の文字を特別なパターンに置換する(quoteするとか、
前に特別な文字を付加するとか)
(b-2)変換を施す。(大抵、一緒にquoteもはずせる)

とかをsedではよく見かける。perlとかだと、置換にこだわらない手続き的な
アルゴリズムに走れるので、そういうことはやらない。

>>785には適用しても意味がないだろうが、行中で場所を入れ替える
なんてことをやる場合も時々ある。(特定のカラムを先頭に移動するとか)



798デフォルトの名無しさん:2005/07/17(日) 23:14:25
どうみてもマルチなんだが
799デフォルトの名無しさん:2005/07/17(日) 23:41:50
>>785
>>797でもいろいろ書いてくれてるけど、役割が違いすぎ。
適当なスクリプト書いたほうが早いよ。

置換したいとことしたくないところを分割して(固定長ならいくらでも方法がある)
置換したいとこだけ置換して(パターンが決まっているわけじゃなくて単純置換なら正規表現不要)
全部くっつける、ってことだよね。
800デフォルトの名無しさん:2005/07/18(月) 09:02:51
>>785を落としてやってみた
うーんメタキャラの判定とか甘いな
>>785にあるように
ABCD → 12C3
BCDE → 45D6
にしたいっていっても、
テキストの上から順に判定とかじゃなくて
左から判定している悪寒
無理っぽい
801デフォルトの名無しさん:2005/07/18(月) 18:42:10
長くポストのなかったこのスレにクソ質問と同時に湧いてくる
>>788,>>791,>>793あたりを見ると>>785本人がやってるとしか思えん。
そもそもマルチしたのを開き直るようなやつにレスすんなよ。
なにが全然回答になってないだよ。アホか。
そんなこと知らんよ。
802デフォルトの名無しさん:2005/07/18(月) 22:55:01
大分前からここ巡回に入れてる者だが。
この話題にはまるで興味無いんだが、
ポストが無いとかよくわかんねー理由で自演認定するのはやめてくんねーかな。
それに、その文脈で言ったらお前も >785 ってことになるんじゃないのか?
803デフォルトの名無しさん:2005/07/19(火) 02:13:51
>>801
薄識の自治厨はPC初心者板にカエレ(・∀・)
804デフォルトの名無しさん:2005/07/20(水) 04:05:34
普通に考えてここまで粘着に答えを欲しがってる奴が自分にレスするなって言うかね。
とりあえずマルチと自演は死んでくれ。
805802:2005/07/20(水) 13:45:34
801 が自演かどうかなんざどうでもいいんだがな。
伝わらなかったか?
806デフォルトの名無しさん:2005/07/20(水) 20:46:09
>>805
お前が一番ウザイってw
807デフォルトの名無しさん:2005/07/21(木) 00:23:20
マルチがダメって奴は正直理解できん。別に全然かまわんだろ。

他の奴にも聞くなんて貴様、俺様が信用できないのか!ってか。
もう幼児的万能感丸出し。馬鹿じゃねえの信用できないに決まってるでしょ。

こういう人は医者にはならないで欲しいね。
セカンドオピニオンだと!(怒)もうあなたを担当するのはお断りだっ!みたいな

まあマルチそのものが悪いのではなく、回答者に謝意を表さないのがいけないというのなら
心情的にわからんでもない。
でもアンタ、回答するのだって(質問者と同じく)アンタ自身のエゴでやってるってこと
忘れてないか?
808デフォルトの名無しさん:2005/07/21(木) 00:28:11
マルチだと回答済みの質問に回答を書いてしまうことがありえるし。
809デフォルトの名無しさん:2005/07/21(木) 00:28:53
>807
例えが悪い。マルチは複数の医者に同時にかかっている状態。
810デフォルトの名無しさん:2005/07/21(木) 00:30:19
どーでもいいが、netnewsみたいにクロスポストのない掲示板でマルチ、マルチと騒ぐのもな。
マルチポストってのはクロスポストがあってはじめて非難されるべきもんだろ。
811デフォルトの名無しさん:2005/07/21(木) 01:23:51
>>809
うん。分ってる。
だからセカンドオピニオンを例えに出した。
812デフォルトの名無しさん:2005/07/21(木) 01:23:52
質問者側がマルチするのは勝手にしてくれて構わない。全然問題ない。
だが、回答者側がマルチをダメと言うのも、当然質問者と同じく勝手にしても構わないだろ?

ダメと言われたくなければ、言われない所でマルチをすれば良い。

君の例えで言うならセカンドオピニオンを用意するときに、
それを嫌だという医者を使う必要はない。それでも構わないという医者のところに行けば良いだけだ。
813812:2005/07/21(木) 01:27:57
まぁ俺自身は興味ないからマルチもそれの排除もご勝手にって気分。
814デフォルトの名無しさん:2005/07/21(木) 02:02:46
>>807
マルチがダメだって言うのは俺様が信用できないのか?って事じゃないだろ。
815デフォルトの名無しさん:2005/07/21(木) 08:17:57
>>814
じゃあ何?漏れは>>810と同意見なんだが。
816デフォルトの名無しさん:2005/07/21(木) 08:54:00
マルチするのは本人の勝手
マルチに教えないのも勝手
好きにすればいい
817デフォルトの名無しさん:2005/07/21(木) 09:57:03
マルチ禁止の不文律を知らない者をよそもの認定して排他行動してるんじゃないの。
問題の本質はマナーじゃない気がする。
818デフォルトの名無しさん:2005/07/21(木) 10:41:48
有意義な議論だと思うが、できれば自治スレ等に移動してもらえると有難い。

プログラム板自治スレッド その2
http://pc8.2ch.net/test/read.cgi/tech/1051039126/
819デフォルトの名無しさん:2005/07/21(木) 14:36:00
↓というわけで、次の質問の方どうぞー。
820デフォルトの名無しさん:2005/07/21(木) 20:30:37
質問です
このスレの住人には「スルー」という概念がないのでしょうか?
スレ違いでしょうかね^^;
821デフォルトの名無しさん:2005/07/21(木) 20:44:36
>>820
お望みどおり、スルーしますね。

↓というわけで、次の質問の方どうぞー。
822デフォルトの名無しさん:2005/07/21(木) 21:06:23
この本は買いでしょうか?
ttp://www.oreilly.co.jp/books/4873111307/errata.0.html
823デフォルトの名無しさん:2005/07/21(木) 21:30:29
文枝
824デフォルトの名無しさん:2005/07/21(木) 23:47:23
>>818
その「有り難い」ってのが排他行動だっての。
そっちのスレはそっちのスレ。
こっちのスレはこっちのスレでマルチに進めれば良い。
825デフォルトの名無しさん:2005/07/22(金) 00:02:19
マルチにつきスルー推奨
826デフォルトの名無しさん:2005/07/22(金) 01:21:31
>>825
マルチがダメって奴は正直理解できん。別に全然かまわんだろ。
827デフォルトの名無しさん:2005/07/22(金) 02:41:16
ふーん、よかったね
828デフォルトの名無しさん:2005/07/22(金) 08:19:53
>>826
お前が教えてやればマルチがダメって奴は手も足も出せない
829デフォルトの名無しさん:2005/07/22(金) 09:11:34
>>828
お前みたいな馬鹿がいるからあちこちで同じ事を聞かなければいけなくなる訳だ。
信用できねーもん。
830デフォルトの名無しさん:2005/07/22(金) 09:39:03
教えてやらなければマルチは手も足も出せない
831デフォルトの名無しさん:2005/07/22(金) 10:30:19
はわわ
832デフォルトの名無しさん:2005/07/22(金) 18:58:21
マルチだからスルーだとか
スレ違いだとかと言い出す自治厨を標榜している奴に限って

た い し た 知 識 を 持 ち 合 わ せ て い な い の で
と り あ え ず 難 癖 つ け て 叩 く

ということでFA?
833デフォルトの名無しさん:2005/07/22(金) 19:00:19
それとお前と何がどう違うのか
834デフォルトの名無しさん:2005/07/22(金) 19:06:39
>>832
お前が教えてやらないのは何故
アホだから?
835デフォルトの名無しさん:2005/07/23(土) 01:00:04
マルチ庇護派って孤軍奮闘って感じだな。
ああ、あほらしくて眠い。
836デフォルトの名無しさん:2005/07/23(土) 01:23:12
このスレ最初から機能してないからな。
「正規表現」って何ですか?レベルのクズの質問ばっかだし。
837デフォルトの名無しさん:2005/07/23(土) 01:32:34
確かにそんな感じかも知れませんねぇ
ところで正規表現って何ですか
838デフォルトの名無しさん:2005/07/23(土) 15:26:46
真理です
839デフォルトの名無しさん:2005/07/23(土) 16:24:35
共通性を見つけて無駄を省く
ようするにマルチの排除
840デフォルトの名無しさん:2005/07/31(日) 17:32:46
テキストからIPアドレスのみを抽出する方法を教えて欲しい。

例えば、
----------------
IP = 10.0.0.1 ;;
IP = 192.168.0.1 ;;
----------------
と言う内容のテキストが有ったとして、
$ grep '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*' ip.txt

ならばIPアドレスの部分にマッチすることは確認済。

で、
$ sed -e 's/^.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' ip.txt
とすればIPアドレスを抽出出来そうに思えるのだけれど、何故か

0.0.0.1
2.168.0.1
と言う具合に第一オクテットはひと桁になってしまう。
理由が分からず困ってるので、誰かお願い。
841デフォルトの名無しさん:2005/07/31(日) 17:35:38
>>840
^.* が最も長くなるところでマッチしている。
842デフォルトの名無しさん:2005/07/31(日) 21:04:06
>>841

成る程、そういうことか……
$ sed -e 's/^[^0-9][^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' ip.txt

で、今回は目標達成。
でもこれってIPアドレスの前に数字があると駄目だね。
汎用的に使える正規表現はどんな物なのだろうか?
自分でも考えてみるけれど解が有るならばどうかよろしく。
843デフォルトの名無しさん:2005/07/31(日) 21:20:29
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\
844デフォルトの名無しさん:2005/07/31(日) 23:57:20
$RE{net}{IPv4}
845840:2005/08/01(月) 20:57:34
perlを簡単に勉強して、出来ることは出来た。

$_ =~ m/(\d{1,3}\.){3}\d{1,3}/ ;
print "$& \n" ;

出来れば当初考えたようにsedでやりたいんだけれど、出来ないのかな?
846デフォルトの名無しさん:2005/08/01(月) 22:54:08
sed -e 's/^\(.*[^0-9]\)\?\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\2/' ip.txt

とか

sed -e 's/^/ /;s/.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/' ip.txt

でいけるけどperlの方がらくそうだな。


847デフォルトの名無しさん:2005/08/01(月) 22:57:41
バカチョン・クソチョンを支援・擁護する放送を行っているNHKの受信料を支払う気は全くありません。
848デフォルトの名無しさん:2005/08/01(月) 23:30:54
NHKの受信料を支払う気はさらさらないが,>>847 のような愛國戰隊大日本糞野郎なんかと
同じ理由であるかのように誤解されたくはないものだな...ってかスレ違い
849デフォルトの名無しさん:2005/08/02(火) 00:51:09
>>845
sed でも \{ \} は使える。
sed 's/\(.*[^0-9]\)\{0,1\}\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*/\2/' ip.txt
850デフォルトの名無しさん:2005/08/16(火) 02:13:29
<div id="001" class="aaa"
 title="bbb"
 style="pading:0;">
<div id="002" class="aaa"
 title="bbb"
 style="pading:0;">
みたいなのがたくさんあります。
任意のidを含むdivを選択する正規表現はどのように書けばよいでしょうか?

複数行は漏れにはむりぽ。。。
851デフォルトの名無しさん:2005/08/16(火) 13:26:33
まずは何で実装しようとしているか示そうな。
852デフォルトの名無しさん:2005/08/16(火) 14:22:25
正規表現は抜け毛が減りますか?
853デフォルトの名無しさん:2005/08/16(火) 14:58:41
正規表現はスキーマですか?
854デフォルトの名無しさん:2005/08/17(水) 04:52:01
infoseek
855デフォルトの名無しさん:2005/08/17(水) 15:59:27
grep -a ?
856デフォルトの名無しさん:2005/08/18(木) 04:48:32
正規表現による軸解析じゃなくって
どっちかというとパーサだな。
rubyだとこんなモジュールがある。

html.findattr("a", "href") { |url|
if url == '../' then
"index.html"
else
url
end
}
857デフォルトの名無しさん:2005/08/18(木) 13:26:49
>>856
詳しく!
858デフォルトの名無しさん:2005/08/18(木) 23:08:24
>>857
リンクの抽出とかタグの検索とかをイテレータで処理する奴。
階層構造処理をやらんのでHTMLが壊れていても動く。
アップして欲しい?
859デフォルトの名無しさん:2005/08/19(金) 13:42:08
>>858
やっぱ要らない。
860デフォルトの名無しさん:2005/08/19(金) 16:09:15
"(〜)^(〜)^・・・^(〜)" ("〜"は1文字以上の任意の文字列、"(〜)"は2個以上)
これをマッチさせ、
それぞれの"(〜)"をグループとして順番に抽出したいのですが、正規表現ではどう書けばよいでしょうか。

ご教授お願いいたします。
861デフォルトの名無しさん:2005/08/19(金) 16:18:43
正規表現だけでは無理だと思う。
実装する言語のループの機能を使ってひとつひとつ抽出することになるかと。
何で実装しようとしているのがわかれば答えれるかも。
862デフォルトの名無しさん:2005/08/19(金) 16:21:03
>>861
当方Javaです。すみません。
863デフォルトの名無しさん:2005/08/19(金) 23:39:10
>>862
.split("\\^")
864デフォルトの名無しさん:2005/08/20(土) 00:48:32
>>863
"\\(.+?\\)(\\^\\(.+?\\))+"でマッチさせてそれ使えば出来ますね。
判りました!ありがとうございました!
865デフォルトの名無しさん:2005/08/20(土) 06:16:51
性器表現
866デフォルトの名無しさん:2005/08/20(土) 08:39:37
卑猥な言葉を連呼するんじゃない
867デフォルトの名無しさん:2005/08/20(土) 10:24:12
>>865
その突っ込みは「詳説正規表現」でも日本人でもない著者が入れている。
868塾講師:2005/08/22(月) 03:53:30
run 走る
eat 食べる
speak 話す
watch 見る
 ・
 ・
 ・

といった感じの単語テキストを作ったのですが
この日本語だけを削除したいです。(中学生のテストのため)

秀丸の正規表現ではうまくいかなかったので、教えて下さい。
手間は惜しみません。
869デフォルトの名無しさん:2005/08/22(月) 06:00:05
>>868
その他(O)→動作環境(E)→正規表現が HMJRE.DLL に
なっているのを確認した上で、

検索(S): ^[a-z]+\f.+\n
置換(R): \0\n
「正規表現(R)」にチェック
870デフォルトの名無しさん:2005/08/22(月) 06:03:31
正規表現のよい入門書を教えてください
871デフォルトの名無しさん:2005/08/23(火) 00:27:09
入門から実装までこれ1冊でOK
http://www.oreilly.co.jp/books/4873111307/toc.html
872デフォルトの名無しさん:2005/08/23(火) 01:23:37
>>871
正直、これで正規表現の実装は無理。
873デフォルトの名無しさん:2005/08/23(火) 01:25:20
うーん、実装は無理だな。
874デフォルトの名無しさん:2005/08/23(火) 12:15:38
正規表現について何も知らない状態から読んでも、大丈夫でしょうか?
875デフォルトの名無しさん:2005/08/23(火) 12:20:53
大丈夫ってどういう意味か知らんが、別に読んでもかまわんよ
876デフォルトの名無しさん:2005/08/23(火) 14:02:09
thx。明日にでも買ってきます
877デフォルトの名無しさん:2005/08/26(金) 01:08:43



qq#"400
<AAA>
<BBB>
"=~

m{
"(\d+)\s+([^"\n]*)\n
([^"]*)"
(?:\n
"(M\d+)\s+([^"\n]*)\n
([^"]*)"
)?
}smx;


print $2,"\n";

でなぜAAAが出力されるの?
878デフォルトの名無しさん:2005/08/26(金) 01:09:24


qq#"400
<AAA>
<BBB>
#=~

m{
"(\d+)\s+([^"\n]*)\n
([^"]*)"
(?:\n
"(M\d+)\s+([^"\n]*)\n
([^"]*)"
)?
}smx;


print $2,"\n";

でなぜAAAが出力されるの?
879デフォルトの名無しさん:2005/08/26(金) 01:15:20


qq#"400
<AAA>
<BBB>
#=~

m{
"(\d+)\s+([^"\n]*)\n
([^"]*)"
(?:\n
"(\d+)\s+([^"\n]*)\n
([^"]*)"
)?
}smx;


print $2,"\n";

でなぜAAAが出力されるの?
880デフォルトの名無しさん:2005/08/26(金) 01:17:12


qq#"400
<AAA>
<BBB>
"#=~

m{
"(\d+)\s+([^"\n]*)\n
([^"]*)"
(?:\n
"(\d+)\s+([^"\n]*)\n
([^"]*)"
)?
}smx;


print $2,"\n";

でなぜAAAが出力されるの?
881デフォルトの名無しさん:2005/08/27(土) 13:26:06
ABCとXYZのどちらかがある場合にマッチするようにするにはどうしたらよいのでしょうか?
882デフォルトの名無しさん:2005/08/27(土) 13:55:06
(ABC|XYZ)
883デフォルトの名無しさん:2005/08/27(土) 14:18:37
881君みたいなのが正規表現を知ってるってことに驚いたさ
884デフォルトの名無しさん:2005/08/27(土) 22:45:00

881 それがおいらの口癖さw

このスレの年齢層にマッチするか
885デフォルトの名無しさん:2005/08/28(日) 01:37:31
はいはいわろすわろすギャハハハハハハハハハハハハハハアハハハッハハハハハハハハハアアハハアハッハハハhh
886デフォルトの名無しさん:2005/08/28(日) 11:53:43
>>884
$str = "881 それがおいらの口癖さw";
$str =~ m/このスレの年齢層/;

perlではマッチしなかったよ
887デフォルトの名無しさん:2005/08/29(月) 03:38:11
XYZを含まないという条件はどのように書けばよいのでしょうか?
888デフォルトの名無しさん:2005/08/29(月) 04:27:46
(?:(?!XYZ).)*
889デフォルトの名無しさん:2005/08/29(月) 21:56:47
>>887
普通にXYZにマッチさせて否定をとる。
perlで書くなら
$t !~ /XYZ/;
>>888 よりオートマトン短くなるから。
890デフォルトの名無しさん:2005/08/29(月) 22:18:18
俺も思ったけど正規表現スレだしなぁ。それに index 使うだろうしね。
891デフォルトの名無しさん:2005/08/30(火) 13:30:45
正規表現を使うべきでないケースで「使うべきでない」と指摘するのもこのスレの責務の一つかと。
892デフォルトの名無しさん:2005/08/30(火) 18:29:12
んじゃ、あまりにも基本的な「使うべきではない」ケースだけ。

単純な文字列を探すだけなら、正規表現を使う必要はない。
例)
 ・"XYZ"を含む
 ・"XYZ"を含まない
 ・先頭(or 末尾)が "XYZ" である
 etc.

index()なり、strstr()なりの方が、遥かにコストが安い
(1/100 程度で済むこともある)。

perlの場合、オプティマイザがある程度は面倒を見てくれるけど
あまり期待しすぎないように。
893デフォルトの名無しさん:2005/08/30(火) 21:22:08
何かの間に挟まれてる文字列が欲しい時って正規表現と
index2回どっちが速いの?
894デフォルトの名無しさん:2005/08/30(火) 21:38:05
>>893
そんなの自分で実際に試してみれば?
895デフォルトの名無しさん:2005/08/30(火) 22:38:16
>>893
どこに挟まれてるか、何文字目にあるかあらかじめ分かってる場合なら、
substr() を使った方が良い。
896デフォルトの名無しさん:2005/08/30(火) 22:47:23
C の話をしてるのか Perl の話をしてるのかこんがらがってきた。
897デフォルトの名無しさん:2005/08/30(火) 22:52:07
関数名おなじだからね…。
Cなら正規表現の方が重いの、すぐ分かるだろうけど。
898デフォルトの名無しさん:2005/08/30(火) 23:56:26
じゃあC++のstd::string::find vs xpressiveで。
899デフォルトの名無しさん:2005/08/31(水) 00:02:04
メールアドレスにマッチする正規表現を書ける兵はいますか?
コピペじゃなくて。
900デフォルトの名無しさん:2005/08/31(水) 00:03:48
正規表現の限界を超えているので無理。
901デフォルトの名無しさん:2005/08/31(水) 00:10:02
>>899
以前書きました。RFC読んで。長いよ、すごく。
gTLD増えていくから、ちゃんと書いても、アップデートしなきゃいけない。
902デフォルトの名無しさん:2005/08/31(水) 01:04:01
正規表現を使うべきでないケースの典型例ですな。
903デフォルトの名無しさん:2005/08/31(水) 01:12:58
使うべきかどうかなんて問題ではない
それだけのスキルがあるかどうかの話
904デフォルトの名無しさん:2005/08/31(水) 01:27:40
使うべきでないときに使わないと判断できるかどうかが本当のスキル。
905デフォルトの名無しさん:2005/08/31(水) 01:29:15
[!$%&*\-./0-9;?a-z^_~]+@[\-.0-9a-z_~]+\.[\-.0-9a-z_~]+


これじゃだめか?>メアド
906デフォルトの名無しさん:2005/08/31(水) 01:32:38
なんでそこまでぴっちり表現したいのかわからん。
907デフォルトの名無しさん:2005/08/31(水) 01:39:14
>>905
それでダメかどうかは使われる状況によるのでなんとも言えないと思う。
もちろん、それで十分なケースも多いと思うけどね。
908デフォルトの名無しさん:2005/08/31(水) 01:52:53
>>905
[email protected]

こんなメアドはありえませんけど・・・
909デフォルトの名無しさん:2005/08/31(水) 02:01:21
このあと、 >>905>>908 の攻防が >>1000 まで続くと予想。
910デフォルトの名無しさん:2005/08/31(水) 02:05:32
どのていどの妥当性をもって良しとするか前提がない以上
およそ想定しうるすべてのメールアドレスに対応する正規
表現を記述しようと試みるのは愚の骨頂といえよう
911デフォルトの名無しさん:2005/08/31(水) 02:06:55
ちなみにこんなものはあるが,俺ならわざわざ使いたいとは思わんね.
ttp://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/
912デフォルトの名無しさん:2005/08/31(水) 02:34:33
携帯のメールアドレスも対象に書く人はここも一読すべし。
http://www.pc-view.net/Telephone/040113/page4.html
913デフォルトの名無しさん:2005/08/31(水) 20:47:55
なんで携帯キャリアは誰も喜ばないのにこんなくだらない処理をするんだろうな
うぜぇ
914デフォルトの名無しさん:2005/08/31(水) 20:53:18
915デフォルトの名無しさん:2005/09/01(木) 00:57:55
9161/2:2005/09/01(木) 11:12:06
質問宜しいでしょうか。

2chのdatをかちゅ〜しゃ形式のdatにするコンバータを作っています。
http://www.geocities.jp/mirrorhenkan/katu/

とりあえずjavascriptで作ったのですが、2点ほど解決出来ません。。
お力を頂ければと思います。

1.「>>1」「>1」「>>1」「>1」「>1−2」等、
 レス番号に全角数字を使っているものにアンカータグを施す際に
 URL部分だけ半角文字にしたいのですが、一文だけの正規表現では
 何か方法がありますでしょうか。
 該当部分です。

line[3] = line[3].replace(/([^>\;]|^)(>|>>|>|>>|≫)([0-9]+)([^<-]|$)/g,"$1"+sp1+"$3"+sp2+"$3"+sp3+"$2$3<\/a>$4");
line[3] = line[3].replace(/([^>\;]|^)(>|>>|>|>>|≫)([0-9]+)(-|\−|\ー)([0-9]+)([^<]|$)/g,"$1"+sp1+"$3"+sp2+"$5"+sp3+"$2$3$4$5<\/a>$6");

上は$3に・下は$3と$5に全角数字が入るので、置換する際に
URL部分(上は"sp1+"$3"+sp2・下は"sp1+"$3"+sp2+"$5"です)の全角数字のみ
半角数字に変換したいです。
(evalを使ってみたのですが、どうもうまくいかないです)

一文ではなくてもいいので、何か解決方法がありますでしょうか。
9171/2:2005/09/01(木) 11:19:26
2.単純なケアレスミスだと思うのですが、 
「&gt;556-557」や「>556-557」等、三桁数字にレスアンカーを施す際に
 変換結果が「<a href=●●>&gt;55</a>6-557」となってしまいます。
 望む結果は「<a href=●●>&gt;556-557</a>」なのですが・・。
 どこを直せば正しくなるでしょうか。
 同じく該当部分です。

line[3] = line[3].replace(/([^>\;]|^)(>|>>|>|>>|≫)(\d+)([^<-]|$)/g,"$1"+sp1+"$3"+sp2+"$3"+sp3+"$2$3<\/a>$4");
line[3] = line[3].replace(/([^>\;]|^)(>|>>|>|>>|≫)(\d+)(-)(\d+)([^<]|$)/g,"$1"+sp1+"$3"+sp2+"$5"+sp3+"$2$3$4$5<\/a>$6");


以上2点なのですが、もし宜しければお願い致します。。
9182/2:2005/09/01(木) 11:20:49
上の名前欄、「2/2」に直し忘れていました・・。
919デフォルトの名無しさん:2005/09/01(木) 11:27:37
>>916-918
    _
   /〜ヽ
  (。・-・)
   ゚し-J゚
920デフォルトの名無しさん:2005/09/13(火) 20:50:07
^([0-9][0-9][ |_|\-]).*[mp3|wav|wma]$

条件に一致したファイル名だけを取得する方法ありませんか?
921デフォルトの名無しさん:2005/09/13(火) 22:21:37
^(([0-9][0-9][ _-]).*\.(mp3|wav|wma))$
で後方参照で取得できると思うけど。 Perl なら $1 とか。

で、処理系 (言語とか) を書かないのには何か宗教的な理由でもあるのかね?
922デフォルトの名無しさん:2005/09/13(火) 22:22:07
>>920
自明に、正規表現にマッチしたファイル名を表示すればいいんじゃないの?
何を聞きたいのかわからんなあ。

ちなみに>>920の正規表現はちょっと独特だぞ。
[|]とか。前半を()でくくる意味もないみたいだし。
923デフォルトの名無しさん:2005/09/13(火) 22:57:54
ls `grep ^([0-9][0-9][ |_|\-]).*[mp3|wav|wma]$`
でできるのかな?'<'とかいる?
924デフォルトの名無しさん:2005/09/13(火) 23:13:06
環境はwin?拡張子からして
925デフォルトの名無しさん:2005/09/13(火) 23:18:12
`でも<でもなく、|。
ls | grep ...
とかする。

でもそもそもWinなのか?

っていうふうにいつまでも周りの藪をつついてまわって本題にたどりつかん。
まー2chじゃよくあることだがな。
926デフォルトの名無しさん:2005/09/13(火) 23:57:47
もうさ、処理系とか実行環境とか書かないのはスルーでいいんじゃね?
927デフォルトの名無しさん:2005/09/14(水) 00:00:27
>>1が何も書かないのが悪かった。
928デフォルトの名無しさん:2005/09/14(水) 00:31:41
【Regular】正規表現【Expression】
http://pc8.2ch.net/test/read.cgi/prog/1126622479/
929デフォルトの名無しさん:2005/09/14(水) 00:40:04
多分もともとは処理系だの実装系だのの話じゃなくて
もっと理論よりの話がしたかったんじゃないかな
たぶん
930デフォルトの名無しさん:2005/09/29(木) 01:53:47
nfgdnXYZfdk
xlfjldsflkj
xldfijXYZsdfj
sdjdsj
sdivfdfsoi
sdXYZlgjjldsf
sdogjdpofgijds

上記の文章から「XYZを含まない行」を検索するには
どのような正規表現を書けばよいですか?
931デフォルトの名無しさん:2005/09/29(木) 02:29:56
含まない正規表現を書くよりも、(例えばgrepで)grep -v オプションでいいやん。
932デフォルトの名無しさん:2005/09/29(木) 10:28:46
そんなん先っぽから舐めるだけでわかるような内容に
でろでろに舐める正規表現使うな、いやらしい、けしからん、
セクハラだ
933デフォルトの名無しさん:2005/09/29(木) 23:03:36
>>931
テキストエディタで、特定の文字列を
含まない行を置換で消したい場面が往々にしてあるのよ
934デフォルトの名無しさん:2005/09/29(木) 23:18:15
>>933
あるパターンを*含まない*行を削除する機能は大抵のエディタにあるだろ。
少なくともviにもEmacsにもあるぞ。

ついでにいうと、大抵のエディタには、今見てるファイルの内容を外部コマンドに
渡して(例えばgrep)その出力結果で置換する機能もあるだろ。viやEmacsならある。

上のどちらかができないエディタって具体的になによ?

てか、予想通り正規表現には関係ない話だってわかったから俺はもういいや…
935デフォルトの名無しさん:2005/09/29(木) 23:32:19
それを正規表現でやると非常にめんどくさいから
だれもそんなことしない
936デフォルトの名無しさん:2005/09/30(金) 01:26:13
sed /XYZ/d でおしまいだもんな
937デフォルトの名無しさん:2005/09/30(金) 15:23:52
>>933
それならそれで、使っているエディタの種類も書かずに >>930 みたいな質問をするというのはどういう了見なのか?
938デフォルトの名無しさん:2005/10/01(土) 04:20:36
>>930
置換前:[^.*XYZ.*\n]
置換後:[]
939デフォルトの名無しさん:2005/10/05(水) 21:53:22
鬼車のVisualC++Toolkit/.Net2003用のバイナリを置いてみた。

https://sourceforge.jp/projects/frogger/
940デフォルトの名無しさん:2005/10/19(水) 11:10:58
おじゃましますよ。
C#のプログラムの分析をしたくてソースコードの簡易なパーサーを作ろうとしているのですが、こういうのに正規表現は向くんでしょうか?
調査中で、正規表現はずぶの素人なので指揮者の方お願いします。
941デフォルトの名無しさん:2005/10/19(水) 12:23:15
>>940
分析の内容次第ではきちんと構文解析する必要ないかもしれないが、一般的には
たぶん向かない。というかその手のことをやろうとしてるのに自分で判断つけられない
ようでは基礎がなってないと思うので、せめてコンパイラの本の構文解析のあたりの
ところまでは読んどけ。
942デフォルトの名無しさん:2005/10/19(水) 13:21:00
>>941
yacc&lexも正規表現使ってますが何か?
943デフォルトの名無しさん:2005/10/19(水) 13:53:14
正規表現は再帰構造を扱えない
つまりなんの役にも立たない


役に立てようとしたのがこの様
944デフォルトの名無しさん:2005/10/19(水) 14:42:20
>>940
既存のモノを使うという手も。スレ違いだけど。

LangScan: ソースコード解析ライブラリ
ttp://gonzui.sourceforge.net/langscan/
945デフォルトの名無しさん:2005/10/23(日) 02:35:24
正規表現にマッチする正規表現を賭ける猛者はいますか?
946デフォルトの名無しさん:2005/10/23(日) 03:09:47
括弧の対応を取らなきゃいけない時点でアウトなのでは?
947デフォルトの名無しさん:2005/10/28(金) 01:45:27
そんなことはない
948デフォルトの名無しさん:2005/10/28(金) 02:48:39
正規表現の境界が決まりなくない?
949デフォルトの名無しさん:2005/10/28(金) 03:53:53
そんなことはない
950デフォルトの名無しさん:2005/10/31(月) 13:01:26
[10/31]aaa[A山].doc
[10/20]yyy[Y下].doc
[8/12]mmm[M字山].doc

このようなファイルがいくつもあり、作者名([A山]、[Y下]、[M字山]の部分)だけを指定する方法が分からないのですが、どのように指定すれば良いのでしょうか?
951デフォルトの名無しさん:2005/10/31(月) 13:06:46
そんなことはない
952デフォルトの名無しさん:2005/10/31(月) 13:21:12
#!/usr/bin/perl
while(<>){
$_=~s/^[.*([.*]).doc/
print $1;
/xeg
}


]は全角か?半角なら\を入れる必要がある
953デフォルトの名無しさん:2005/11/03(木) 23:09:59
age
954デフォルトの名無しさん:2005/11/03(木) 23:12:31
そろそろ次スレたてますか?
955デフォルトの名無しさん:2005/11/03(木) 23:14:25
次スレ立てました。
http://pc8.2ch.net/test/read.cgi/tech/1131027222/
ちょっと感じ変換を間違えましたがご愛嬌でゆるいs手くdさあい。
956デフォルトの名無しさん:2005/11/03(木) 23:24:31
>>955
これは許されないだろ
957デフォルトの名無しさん:2005/11/03(木) 23:24:35
おもんない
958デフォルトの名無しさん:2005/11/03(木) 23:28:27
また使い古されたネタを……。最低だな。
959デフォルトの名無しさん:2005/11/03(木) 23:32:37

あまりにもアレなのでスレを立てる練習に使わせてもらいました。

正規表現 part2
http://pc8.2ch.net/test/read.cgi/tech/1131028296/
960デフォルトの名無しさん:2005/11/04(金) 03:10:57
ナイスブルマ
961デフォルトの名無しさん:2005/11/04(金) 12:18:31
まだ40も残ってるのに
馬鹿な早漏君だ
962デフォルトの名無しさん:2005/11/04(金) 13:45:12
おまいらお勧めの正規表現を羅列しながら埋めるんだ
963デフォルトの名無しさん:2005/11/04(金) 18:25:51
.
これ最強
964デフォルトの名無しさん:2005/11/12(土) 14:59:32
正規表現をこれから学ぼうと思うのですが、お薦めの入門書を教えてください。
965デフォルトの名無しさん:2005/11/12(土) 15:02:01
O'REILLYの詳説 正規表現とか。
高いけど。
966デフォルトの名無しさん:2005/11/12(土) 16:26:06
正規表現むずかすぃ・・・
つくっても何でその表現だと引っかからないのかがわからんです・・・
なんかテストツール見たいのものってありますか?
967デフォルトの名無しさん:2005/11/12(土) 17:00:03
txt2regex みたいなの?違うか。
968デフォルトの名無しさん:2005/11/12(土) 18:04:48
んーちょっと違うかも。
いま作ってる正規表現のどこがおかしくて意図した動作をしないのかを検証するツール。
ひっかからないとしてどこで引っかからなくなってるのかがわかりやすいものがあればと。
969デフォルトの名無しさん:2005/11/12(土) 22:30:36
それは大物を狙いすぎです。
970デフォルトの名無しさん:2005/11/12(土) 23:17:46
971デフォルトの名無しさん:2005/11/12(土) 23:34:31
オレははまったときは部分パターンを抜き出してテストしたり、
適当にカッコ挿入してキャプチャーしてどこまでマッチしてるか
表示させたりみたいな地道なことをやっている。
972デフォルトの名無しさん:2005/11/13(日) 07:54:04
>>970 動かしてみたけどぜんぜん動かない・・・
>>971 やはりそんな感じですか・・・みんなもはまってるんですね。該当部分だけ引っ張り出すと正常に動くんだけど中に入れると動かない・・・orz
なんか間違ってるんだろうけど、どこかわかりません。

とりあえずちょっとツール作ってみました。括弧の対応と引っかかる文字列あれば抜き出します。
対象文字列と正規表現入れて成功すると引っかかったのをグループごとに表示します。
右側には括弧の対応も示されます。
http://www.uploda.org/file/uporg236598.zip.html
暇な人ツールに最初から入ってる正規表現のどこがおかしいのか教えてください。
対象文字列に"2005/10/21 12:45:562005/10/21 12:45:56"といれると後ろの日付部分が認識されるんだけど"5d-2005/10/21 12:45:56"とすると認識されないです・・・
973972:2005/11/14(月) 00:05:49
書き忘れましたが.NET2.0 ようです。
974デフォルトの名無しさん:2005/11/22(火) 00:50:32
秀丸の正規表現による置換で
行頭がhttpで始まる行を削除し\nに置換したいのですが
正規表現の書き方を教えてもらえませんか
975デフォルトの名無しさん:2005/11/22(火) 01:01:30
>>974
^http.* を 空の文字列に置き換え
976974:2005/11/22(火) 01:02:42
>>975
ありがとう

置換前 http..*\n
置換後 \n
でもデキマスタ
977デフォルトの名無しさん:2005/11/22(火) 01:03:57
>>976
それじゃ行頭以外にもマッチするじゃん
978974:2005/11/22(火) 01:09:00
>>977
あらら、本当だありがとう
979デフォルトの名無しさん:2005/11/23(水) 12:48:08
ntaich073055.aich.nt.adsl.ppp.infoweb.ne.jp

これを正規表現に直すと、どうなるか教えて下さい
980デフォルトの名無しさん:2005/11/23(水) 12:51:22
ntaich073055[.]aich[.]nt[.]adsl[.]ppp[.]infoweb[.]ne[.]jp
981デフォルトの名無しさん:2005/11/23(水) 12:56:26
>>979
何のためにそれを正規表現に直したいのか知らないが
恐らく、どこかの掲示板なりのアクセス禁処理のためだと考えて答えると

ntaich[0-9]+.aich.nt.adsl.ppp.infoweb.ne.jp 

こうだと思われる
982デフォルトの名無しさん:2005/11/23(水) 14:10:29
次スレの性器表現はどこいったの?
983デフォルトの名無しさん:2005/11/23(水) 14:40:16
984デフォルトの名無しさん:2005/11/23(水) 23:05:41
985デフォルトの名無しさん:2005/11/24(木) 12:51:02
うめ
986デフォルトの名無しさん:2005/11/25(金) 01:55:53
ume
987デフォルトの名無しさん:2005/11/25(金) 12:29:30
産め
988デフォルトの名無しさん:2005/11/25(金) 17:20:31
989デフォルトの名無しさん:2005/11/26(土) 05:11:26
 
990デフォルトの名無しさん:2005/11/27(日) 01:52:07
991デフォルトの名無しさん:2005/11/27(日) 01:53:28
992デフォルトの名無しさん:2005/11/27(日) 01:54:50
993デフォルトの名無しさん:2005/11/27(日) 01:55:53
994デフォルトの名無しさん:2005/11/27(日) 01:56:58
995デフォルトの名無しさん:2005/11/27(日) 02:00:56
996デフォルトの名無しさん:2005/11/27(日) 02:01:12
997デフォルトの名無しさん:2005/11/27(日) 02:02:28
(正|規|表|現)
998デフォルトの名無しさん:2005/11/27(日) 02:03:07
999デフォルトの名無しさん:2005/11/27(日) 02:04:59
埋めるの飽きた
1000デフォルトの名無しさん:2005/11/27(日) 02:12:56
10{3}
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。