語ろうぜ。
2げっと
UNIX板にもWebプログラミング板にもあるというのに、 さらにまだスレを立てるのか。
とりあえず * ワイルドカード。
正規表現道場とか、どっかになかったっけ?
まだじぇんじぇんわからん
正規表現ライブラリを作成するスレッドはここですか?
[ ] 中のものどれかとマッチ。
(i) マソコ
[1-9]?[0-9]+
オートマトンっておいしそう
マトンってところがおいしそうだよな
15 :
デフォルトの名無しさん :03/09/06 20:07
,,,,,,, _ /'''' '';::. 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 単純な方法は、オートマトンを作ってただぐるぐる回すだけ。
>>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アクションね
>>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
性器表現 ウプッ 俺最高!
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 は日本語を勉強してください。
おはよう いや昨日さ、朝方までネッツムービー見てたのよ なので、今起きたんだよ ネッツムービーっつっても、既存のメディアをネットで見たので 正式にはネッツムービーとは言わないのだが・・・ もちろんそこまでして見たいムービーはガンダムに決まってる 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とか何のことかと思ったら… 非決定性有限オートマトンと決定性有限オートマトンのことか もっと分かりやすく説明しる
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"は過去に出た文字だから後ろだ
どちらも正解だと思う
「前日」って言葉はあるけど 「後日」って言葉はないな。
書き込んだ直後に「後日」って言葉があるのに気づいた。 でも「前日」とは真逆の言葉だ。
>>80 それは、言葉の意味がちゃんと確定されている状況のひとつに過ぎないわけだ。
他には、人間の向いている方向は、眼前・背後のように、前後が決まっていたり。
↓ 閑話休題でたのむ
82 :
デフォルトの名無しさん :03/09/14 11:03
後方参照 をDFAだけど 簡単な後方参照 \(a.b\)\1 とかは 直感DFAに出来そうに思う。 . の部分にマッチした変数とすればという事だけど これをDFAの範囲内でないという事なら そもそも 後方参照は正規表現の範囲内かという事になるし
>>82 > これをDFAの範囲内でないという事なら そもそも 後方参照は正規表現の範囲内かという事になるし
>>72-73
84 :
デフォルトの名無しさん :03/09/14 11:49
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
ああ、もう一つ同じ事を言っておくが、アルゴリズムは常識語だ。 知らなければ勉強しなおしてください。 くれぐれもプログラムあるいはコードと間違えないように。
状態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 お前は三段論法とか演繹を知らないのか、と
せっかく皆が有効な議論をしようとしてるのに、一人で潰しちゃってる奴がいるな がっかり・・・
そう
>>108 の言う通り
>>107 は NFAでDFAに変換出来ないという物を1品だけ示せばそれですむんだから、なんでそうしないんだ?
それはたぶん普通のNFAではないのだろうけど、どういうふうな拡張がされていて
どこがDFAに変換出来ない(あるいは難しいのか)がそれで明らかになるだろう。
115 :
デフォルトの名無しさん :03/09/20 15:37
まだ頭悪い奴が騒いでるな(藁 前方参照・後方参照の無い正規表現の話は的外れだからやめてね。 みんなもっと高度な話をしてるんだよ。
116 :
デフォルトの名無しさん :03/09/20 15:38
何度も言うが、これだけ分かりやすく書いてるのにわかんないのは、 自分理解力が不足してるんだって気づきなさい。 ほら、わかんないって騒いでるのはお前だけだろ?
はい わかんないです。
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などと同じ。 利用できそうならするが、速度や機能を考えて自分で実装することもある。
皆様の足元にも及ばない、まるで教えて君で申し訳ないのですが パスワードの設定に関して妥当性を正規表現で評価する方法を探しています。 もし皆様のなかで優れた方法をご存知でしたら、教えてください。 VBSで評価しようとしています。(お恥ずかしい話です) 条件は色々あると思いますが、私が想定しているのは -8文字以上 -14文字以下 -アルファベット(大文字小文字)どこにあってもよく各1文字以上 -数字 どこにあってもよく各1文字以上 で作られていることです。
/.{8,14}/ && /[A-Z]/ && /[a-z]/ && [0-9]/ ってこと?
/\w{8,14}/
133 :
デフォルトの名無しさん :03/09/25 01:43
オートマトンはおいしいですか? マトンカレーはおいしいです。
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 の思うとおりすごい正規表現書くしかないし。
レスありがとうございます 多段階方式ですか、試して見たいと思います しかし.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\)]+
とか
>>143 >>144 >>145 レスありがとうございます
例としてa and bをあげましたが文字列も検索したいと思っています
.NETのMatch関数の検索よりもJREの検索時間の方が極端に早かったので
何とかJREを使いたいと思っているのですが・・
(大きいサイズのテキストファイルを検索したいので)
性 器 表 現
正直スマンカッタ
>>147 or な検索はできるけど
>>139 のような and な検索って正規表現ではできないんじゃないかな
なんかトリッキーな正規表現を記述すればできるかもしれないけど、
正規表現の正当な書式で and にあたるようなものは無いと思われ
>>139 先読み (?=…) をサポートしている正規表現ライブラリなんて、
それこそ、いくらでもあると思うが。たしか、Perl5のエンジンを
ぱくったやつとかもなかったっけ?
結局、and 部分の判定は別に行えばいいのではないかと。
>>140 の提案のように、
grep aaa | grep bbb | grep ccc | grep ddd
とするような
Ruby の eregex.rb には RegAnd, RegOr があるみたい
154 :
デフォルトの名無しさん :03/10/12 23:32
おまえら正規表現エンジンってつくったことありますか?
あるけどなにか?
ないけどなにか?
あいけどなにか?
なるけどなにか?
あなるけどおなにか?
携帯キャリアのメアドを評価する正規表現 くらさい・・・
>>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} はどう展開するの?
>>170 純粋なDFAでは部分一致参照( ( ) を \数字 で参照)は実装不可能
@ で split すればいいじゃん
:g/.*@/s///g
>>178 <(_ _*)> アリガトォ できますた(;´Д`A ```
>>177 splitでやってましたが正規表現でいきたかった
Σ(゚д゚|||) マジデ!!
PHPでHTMLファイルからタイトルのみ取り出すには $result = ereg('<title>(.+)</title>', $str, $regs); でOK?
<title>([^<]*)<\/title> でいけました
184 :
デフォルトの名無しさん :03/11/06 15:09
空行の正規表現を教えてください
>>184 せめてどの実装での質問かくらい書いても罰は当たらないと思うが?
%r#^$%#
すみません。 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}* も正規表現である
そりゃできるだろ ちっとは考えたのか?
>>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番最後の/はなくてもいい)
-------------------------------------------------------------
としたいのですが・・・
教えて頂ければ幸いです・・・
(?!:)
196 :
デフォルトの名無しさん :03/12/21 21:40
grepである文字列が含まない行を調べたいのですが 正規表現でどうやって書くんですか? 具体的に言うとアドレスの集合の中から www.2ch.net を含まないアドレスの検索をしたいということです
>>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* か
>>202 納得。
自分でやってみたが、途中でめんどくさくなった。
オートマトンを書くまでは簡単なんだけど。
<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> としたいのですが、可能でしょうか?
訂正 <center><img src="./eee//残したい1.png"></center> でなくて <center><img src="./eee/残したい1.png"></center> でした
>>205 %s:"\./[^/]*/[^/]*/:"./eee/:g
>>207 亀レスで、すいませんでした。
ためしてみましたが、出来ませんでした。
申し訳ないんですが素人なので、置換前の条件と置換後の条件を併記で、お願います。
>>208 利用する言語をちゃんと書かないからそういう答えしか返ってこない。
>>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を許可しようとした場合、 どのようにすればよいのでしょうか?
>>212 yyyy/?MM/?dd
なお、それが「日付」であるかは別の方法でチェックしましょう。
216 :
デフォルトの名無しさん :04/01/02 21:58
217 :
デフォルトの名無しさん :04/01/02 22:11
『標準入力からテキストファイルを読み込み、単語を検出して辞書順に並べ、出現頻度を標準出力に出力しなさい。』 って宿題があるのですが分かる方お願いします。オートマトンとかそういうのを使っていたと思うのですが・・・
>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バイト文字が含まれていない"}
文字コードが何なのかもわからないのに?
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が使える
おいおい終端って・・ なんのためのストリームだよ。
じゃあ別に終端に達しなくてもいい
正規表現ライブラリの作者はアホばっかだね。
255 :
デフォルトの名無しさん :04/01/24 20:27
すんません。質問です。 「泊数」にはヒットしたいけど、「宿泊数」にはヒットして欲しくない 場合、正規表現をどうやって書けばいいですか?
>>256 さっそくのレスありがとうございます!
EmEditorで試してみたんですが、エラーになってしまうようです。う〜んなんでだろ?
この場合先読みでもいけるか。 「(?!宿)泊数」で。
「〜って正規表現はどう書くんですか?」系の質問は、仕様ツールも明記するが吉。
>>259 ありがとうございます。これでできました!
こういうのはやっぱり、先読みのできない正規表現では無理ですよね?
%% "宿泊数" ; "泊数" {hoge();} %%
[^宿]泊数
>>263 それだと「〜だった。泊数は〜」なんて文が来たら「。泊数」に
マッチするから、場合にもよるけどお勧めしない。
つーか先頭にマッチしないんじゃないかと。
[^宿]泊数|^泊数
これで先頭にもマッチするけど、どうよ?
でも
>>264 のパターンではやっぱりダメか・・・
先読みできないとちょっと無理かな?
宿泊数にさえマッチしなければいいんじゃないの?
269 :
デフォルトの名無しさん :04/02/12 09:50
age
いや、置換したいときに困るんじゃないかと思って。 「[^宿]泊数」にマッチした部分を例えば「台数」に置換するとき、 「〜だった。泊数は〜」が「〜だった台数は〜」になるので、 こういう場合困るから、と言ったのでした。
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;
かなぁ?
278 :
デフォルトの名無しさん :04/03/01 20:57
C言語の関数一覧を抽出できる正規表現を教えてください。
その前にプリプロセスの過程を覚えねばなるまいて。
プリプロセス?
>>280 厳密なことをいうとそういうことになりまっす
すぐにはスパッっと出てきませんか?
>>283 さー。ちょっと求めているものと違うかもしれないけど
cflow とか使えば?
windows 系ならフリーで適当にいろいろ落ちているし、
cflow のコマンドラインがイヤなら doxygen なんかもおもろいと思うけどね。
さすがに (\w+)\( だと大雑把過ぎるか。
>>286 ものすごい量ヒットしましたね
普通に if(
とかが出てきました
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)).*)
296ありがとうございます つうか微妙に質問まちがえた_| ̄|○ ○と○と○と○によって構成されている単語の検索方法ってわかりますか? ○は1文字です、
事故解決しました、お騒がせしております
自己解決でもどう解決したかくらい報告するのが漢ってもんじゃないのか?
ピリオドを検索対象にするには一体どうやればいいのでしょう? 「.」を打ったら全ての文字の代わりとされてしまうではないか
>>299 あ、はい、え〜っと文字数が分っていたので
^[sadf][sadf][sadf][sadf][sadf]って感じにやったら出来ました!
おしゃ
>>302 正規表現エンジンによるけど [asdf]{5} とかあるよ。
正規表現で無理なことなんかあるわけ無いだろ!!
はったりもたいがいにしとけ!
307 :
デフォルトの名無しさん :04/03/04 22:25
>>305 あのなあ…
そういうのは任意の深さのネストしたブロックを
マッチする正規表現を書いてみてから言え。
{{{{{{}}}}}}
_| ̄{{{{{{}}}}}} ̄|○
腸?
ネタにマ(ry
そこでプッシュダウンオートマトンですよ
313 :
デフォルトの名無しさん :04/03/06 20:05
秀丸にあるタグ付き正規表現置換って、どの正規表現環境でもサポートしてるの?
>>313 タグ付き(というかグループ化?)はほとんどのやつが対応してるでしょ。
つーか正規表現に規格みたいなもんあったっけ。
POSIXのがそれっぽいけど。
メタキャラクタのエスケープ辺りの仕様違いはありえる。
315 :
デフォルトの名無しさん :04/03/06 22:14
>>296 .*(?=AAA|BBB|CCC).*
[^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
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 だろうがよ
普通に検索できるぞ。 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 みたいなのない?
346 :
デフォルトの名無しさん :04/04/03 12:06
347 :
デフォルトの名無しさん :04/04/03 13:32
しつこく
>>338 です、お礼に
調子こいて、行頭のスペースを消去するのを考えてみますた
今度は簡単にデキマスタ
検索→^スペース(文字を打ち込んだらイヤズラ、^(サーカムフレックス)の次に
本当にスペースをポチット押すだけです)
置換→
これでばっちりデキマスタマンセー
ほらみろ、正規表現でできないことなんか無い!
出来ない → 正規表現が悪い × 出来ない → 自分の頭が悪い ○ こういう仕組みだ! 覚えとけ!!
ワロタ
>ほらみろ、正規表現でできないことなんか無い! あるパターンの素数回の繰り返しとか考えてみる。
352 :
デフォルトの名無しさん :04/04/03 23:26
ラブ遊戯王ですまないんだが、「/」より後にあるものを全て消した文章にしたい。秀丸です。 強奪/装備魔法 魔導サイエンティスト/闇/魔法使い/300:300/1/効果 波動キャノン/永続魔法 を、 強奪 魔導サイエンティスト 波動キャノン にしたいんだが、 検索: /*\n 置換: \n にしてどうにもならない。*がDOSとかワイルドカードの*とは違うのは解るが こういう場合どうするんですか?ご教授願う。
検索: /.*$ 置換:
.* という表現方法があったか。ナルホド。ありがたうござました!
日本語が不自由そうなのは直した方がよいよ
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の正規表現はかなりのことができると思うけど
>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とかさ。
>>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
あげてー
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/
「動いた」と書きましたが、早とちりだったみたいw 結果が /def/ と同じでした。 使ってる正規表現ライブラリが、対応してないのかも… 諦めます。
392さん、ありがとうございます。 /(?<=abc)def/ なんですね。勉強になりました。 でもライブラリが未対応だった _| ̄|○ガックシ
>>393 > 使ってる正規表現ライブラリが、
何使ってるかは先に書け。
pcre使ってる人いる? これの日本語に対応したのない?
いまどきふつー鬼車。
ふつーはboost::regexだろ
>>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 正規表現では(一般に使われてる拡張正規表現でも)表現できません。
これくらい初歩の初歩なんで知っとけ。
。・゚・(ノ∀`)・゚・。
>>429 どもでした。勉強不足ですみません。。。
>>426 文脈自由文法、
あるいは、プッシュダウンオートマトンが受理する文法、のことか?
432 :
デフォルトの名無しさん :04/06/07 17:01
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 って使えるの?
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専用でよければ、つくったのがあるけど…
環境は 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個書く。
>>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
想定外のデータを読み込んだ時に無限ループぽくなることがあるのですが、 停止や先読み後の飛ばし読み はできないのでしょうか?
実装によるよ
"This is a (test) file." という文字列から (test) という部分を取り出すにはBoostのRegexでどういう記述になりますか? boost::regex expression("\([a-z]*\)"); としても 「warning C4129: '(' : エスケープ シーケンスとして正しく認識されませんでした。」という 警告が出て、実際に認識されてないようでした。'(' が '<' なら正しく認識出来るんですけど・・・
boost::regex expression("\\([a-z]*\\)");
>>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文の条件式に使うな
>>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
既に&を&に変える作業をしてしまった後で、
if($message =~ /
http:\/\/ ([a-zA-Z0-9\.\/\-+#_?~&\%=^\@:\;]+)/i){
$1 =~ s/amp\;//g;
}
のような方法で、$message中のURLを&から&に変える作業をしたいのですが、
上の文で試したところ$1から;の行の間でエラーメッセージが出てしまいました。
どうすればよいのでしょうか?ご指摘の程ご指導をどうか宜しくお願いいたします。
&を&amp;です。。
>>512 正規表現の問題というよりは Perl の問題のような。
my $msg = $1;
$msg =~ s/amp\;//g;
とするとか。
有難う御座います。。 でもこれでは$messageは変化しないのでは無いですか?
確かに。じゃあこれで。
$message =~ s/(?<=
http:\/\/ )([a-zA-Z0-9\.\/\-+#_?~&\%=^\@:\;]+)/$_=$1;s#amp;##g;$_/gei;
それは素晴しいですね。。 有難う御座います、ためさせていただきます。
有難う御座います、成功しました。 もうひとつお願いがあります。 これ以降は無駄な馴れ合いになりますが・・・・。 私の本ではしっかり正規表現が記載されていません。 オススメの文献、HPなどなど教えていただきたいです。 これというのも今回の件を例にして言うと、 ?<=のような正規表現の意味を理解していません。 教えてもらってばかりでは迷惑がかかりそうなので・・・。。
>519 有り難う御座います、参考にさせて頂きます。 早速お気に入りに追加させていただきました。 隅から隅まで読み直したいと存じます。。 時間を割いてのご指導有り難う御座いました。 またお手数とは思いますが、>516を解説頂きたいです。 無理の願いと承知の上ですのでスルーして頂いても結構です。 本当に有り難う御座いました心から感謝しております。 >520 すいません、ご報告有り難う御座いました。 友達に聞いて回った結果かもしれません。 しかし、テンプレに関しては目を通させて頂きました。 ご指摘感謝いたします、これからは注意致します。
>>521 まず s/(前半)/(後半)/gei の前半部分から。
(?<= ) のところは lookbehind (戻り読み) ってやつ。
マッチさせたいけど置換対象にしたくないのでこうしてみた。
>>489-504 あたりで議論されてるから見てみて。 (漏れも
>>499 で初めて使った。)
その後ろはわかるよね。
後半部分は、正規表現のオプション e を付けてるので、
Perl の式として評価した結果が置換結果となる。
'#' とか使ってるからわかりにくいと思うけど、
$_ = $1; s/amp;//g; $_;
と書き下したらわかるよね。
つまり、前半でマッチしたもののうち、 "
http:// " 以外の部分を対象として、
s/amp;//g の置換を行ってる。
ところで、これ、もっとスマートに書けないかなあ?
>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 正規表現でのやり方はあるのでは
と思いまして。。。(;´Д`)
まあぶっちゃけて言うと、あるかんなもん。 素直に何かプログラミング言語を使いなされ。
>>529 できるできないの話じゃなくて正規表現でやるべきことじゃないだろ
正規表現に足し算なんてあったか?
concatenationならあるよ
533 :
デフォルトの名無しさん :04/08/09 07:43
爺さん:夏休みだねえ・・・ 婆さん:えぇ、本当に
正規表現の貧弱さを指摘されたからって切れるなよ
貧弱っつーか、何でもかんでも正規表現でやろうってほうが頭おかしい
バッドノウハウそのものだな正規表現って。 MSあたりに作り直してもらおうぜ。
挫折した方がわめいています
MSで思い出したけど、Visual Studio系とかについてる MS独自の正規表現が使いにくいったらない。 慣れれば違うんだろうけど、ECMAScriptとかPOSIX系の正規表現に慣れちゃうと 他の正規表現は使えませんな。
>>540 emacsの正規表現とか?
.NETのRegexは結構マトモですよ。
542 :
デフォルトの名無しさん :04/08/10 00:34
.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
彼はもう寝た
^ぬるぽ$
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*はげ にしてもヒットする単語のお尻に空白がついちゃうのは何が悪いんでしょうか?
>>558 貪欲マッチ (最左最長マッチ) するから。
(.{5,10}?) とか (\S{5,10}) とか (.{4,9}\S) とかしる。
>>558 () に空白を含めたくない、という意図なら、
ほげ\s*([^\s]{5,10})\s*はげ
とかしないと。
.{5.10} が欲張りで空白も食べちゃうのがキミの意図と違うんだろう。
561 :
559 :04/09/10 16:35:07
ばっちりいけました。 ありがとうございました。
正規表現エンジン作ってる人いる?
イジリー岡田とかチョコボール向井とか加藤鷹とか
565 :
sage :04/10/14 02:11:20
>562 ノシ 今コンパイラコンパイラ作ってて、 正規表現によるトークンナイザ実装中だよん。
566 :
デフォルトの名無しさん :04/10/14 02:28:41
ヲタハケーン
567 :
デフォルトの名無しさん :04/10/16 20:50:37
鬼車って後方参照遅いね。
686 名前:デフォルトの名無しさん[sage] 投稿日:04/10/29 13:49:57 正規表現で後方検索することってないよね。 不要だからライブラリが存在しないのでは? Delphiにないから不要といってるのではないよ。
最後の一言が弁解がましくて微笑ましい。
Delphiって文字列ひっくり返せるから後方検索なくても大丈夫。
571 :
デフォルトの名無しさん :04/11/07 21:04:26
Googleで「置換」を検索 ↓ もしかして: 痴漢
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 …っていうのじゃダメですよね? もっとスマートに証明する方法を教えて下さい。
>>573 漏れもよく判らんけど、A⊆B ⇔ A∩B=A だから、
・L1,L2が正規言語ならL1∩L2も正規言語になることを示す。
・ふたつの正規言語が等しいか判断するアルゴリズムの存在を示す。
という方針で出来そうな気がする。
ありがとうございます! >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
そんなことも分からずに正規表現使ってる香具師がいたとは 恐れ入った・・・
([ぬま][るん][ぽこ])+
ぬるぽ ぬるこ ぬんぽ ぬんこ まるぽ まるこ まんぽ まんこ
緊急! {ww: w∈{a, b}*}はRegular languageですよね? {ww^R: w∈{a, b}*}はNon-regular languageというのは知っています。
んなもん自分で表現してみれば分かるだろ
緊急と書けばすぐ答えが返ってくると思ってるバカ
Microsoftの緊急の脆弱性だって2ヶ月くらいパッチが提供されないこともあるのに
─── /⌒ヽ, ─────────
 ̄ ̄ / ,ヘ ヽ∠忍\  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 人 ガッ
 ̄ ̄ i .i \ 〜|/゚U゚|ヽ, ___,, __ _ ,, - _― < >__∧∩
── ヽ勿 ヽ,__ヾy//j i~"" _ ― _ .V`Д´)/ ←
>>578 ______ ヽ,, / / __,,, -- "" ─ "ー | /
─────── ヽノ ノ,イ ─── ― - / /\|
─────── / /,. ヽ, ── //
______ 丿 ノ ヽ,__,ノ ___ _ _ _
j i
_____ 巛i~ ____ _
危うく見逃すところだった…。
588 :
デフォルトの名無しさん :04/11/22 15:11:45
オライリーの、フクロウが表紙の正規表現の本って、内容いいかな? 立ち読みして調べたいんだけど、近くのショボい本屋には売ってないよー。
正規表現の濃い使い方を知るにはよいと思う。 漏れは正規表現エンジンを作ろうとして買ったらいまいち役に立たなかった
>>590 それは、使う人が欲する情報と、作る人が欲する情報が違うという
意味で受け取ってもよろしいか?
あの本は、UNIX系の各種正規表現エンジンを使い分けなくてはならない人が読むべきものかも
593 :
デフォルトの名無しさん :04/12/09 20:49:19
秀丸で 「 To: ******.**_**-**.@****.***.** 」 って行だけ残して全部消したいんだけど。。。誰か教えてくれませんか?
595 :
デフォルトの名無しさん :04/12/09 20:56:54
正規表現自体が、全然素人でーー
596 :
デフォルトの名無しさん :04/12/09 20:57:50
ここで聞けば出来るかも知れないって思って
>>595
cat spamlist |grep "To:"
598 :
デフォルトの名無しさん :04/12/09 21:19:05
そっか↓しかちんぐ
ここ、プログラム板なんですけど。 初心者板じゃないよ。
検索 +--------------------------+ |^(?!To:).*\n | +--------------------------+ 置換 +--------------------------+ | | +--------------------------+ …でいけるとおもったけど、ぜんぜん駄目だ… なんでやーー!!
置換文字列に 検索文字列を含むファイルの名称を指定するには どうしたらいいんでしょう
日本語講師とエスパーのダブル募集です。
603 :
デフォルトの名無しさん :04/12/16 16:23:16
abc_def_ghi -> abcDefGhi という風に _ を抜いて続く文字を大文字にしたいんですが
>>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 }
605 :
603 :04/12/16 16:33:13
>>604 サンクスです
でもperlでやる必要が・・。
$hoge =~ s/_./\U$&/g;
$hoge =~ s/_//g;
という二段階にしないとダメ?
Ruby以外は糞
それはRuby信者も糞ということですか
609 :
デフォルトの名無しさん :04/12/16 21:28:35
Perlあんまりにも漢字の扱いが酷くてRubyに乗り換えた。 信者うんぬん言う以前に実装の問題が...
Perlのスクリプトに挑戦していて、壁にぶつかっています。 2-3 2 -3 2- 3 2 - 3 をまとめて 2--3にしたいのですが、 $hoge =~ s/(?<=[0-9](|\s*))-(?=(\s*|)[0-9])/--/g; これではエラーになります。 どう書けばよいのでしょうか。
$hoge =~ s/(?<=[0-9]\s*)-(?=\s*[0-9])/--/g; と書きたいところだろうが、look-behindに可変長 文字列にマッチするパターンは使えないので、 $hoge =~ s/([0-9])\s*-\s*([0-9])/$1--$2/g; あたりか。
と思ったが、-の前後の\s*はこの場合消えなければならないので 数字一個なら固定長だった。これでいけるはず $hoge =~ s/(?<=[0-9])\s*-\s*(?=[0-9])/--/g;
>>611-612 $hoge =~ s/([0-9])\s*-\s*([0-9])/$1--$2/g;
でばっちりうまく行きました。数字は1個と限らないので、上の方を使います。
>>613 数字の前後に\s*がつくと可変長だが数字だけなら固定長
という意味なので、上も下も数字をひとつしか見てない
のは同じ。
ちなみにベンチとると下のほうが倍近く速いよ(笑)
上の方が先読み使ってないから素朴でわかりやすいという
のはあるかもしれん。
これで文句あるまい s/(\d+) \s* - \s* (\d+)/$1--$2/xg
…と思ったけど数字は結局1つしか見ないでいいのか。あほだった
617 :
デフォルトの名無しさん :04/12/20 14:09:57
>>614 すいません、ベンチマークってどうやって取るんですか?
618 :
デフォルトの名無しさん :04/12/22 02:36:15
Windowsで使えるPOSIXのregexp互換ライブラリってありませんか?
c++で正規表現使うにはどうすればいいんですか?
boost::regex使え。
>>618 PCRE や Oniguruma の POSIX 互換 API を使ってみるとか。
622 :
デフォルトの名無しさん :04/12/23 23:49:25
How to WSDL convert to SOAP?
>622 まずは英文法を覚えろ。話はそれからだ。
624 :
デフォルトの名無しさん :04/12/29 13:35:41
javaを使用しています。 改行以外の任意の1文字は、正規表現では . となりますが、 改行を含める場合はどのような記述になるのでしょうか。
(?:.|\n)が安全牌かな。
626 :
デフォルトの名無しさん :04/12/29 14:44:37
>>625 わわ、すばやいレスありがとうございます。
期待どおりの結果が得られました。
?:
といる記述ははじめてお目にかかりました。
後追いですが、意味を調べて理解しておきます。
ありがとうございました。
627 :
デフォルトの名無しさん :04/12/29 18:43:41
>>625 ダ、ダメでした。
\rがスルーされてしまいます・・・(T_T)
悲しいです〜(ToT)
WSDL:プロシージャのI/F定義 SOAP:プロシージャコール と思った場合変換も減ったくれも無いと思った。
>>624 漏れは Perl だと [\s\S] をよく使うけど、これじゃダメ?
perlならsオプション・・・・
632 :
デフォルトの名無しさん :04/12/30 00:09:31
javaで円マークとマッチさせたいだけなのに、、、できない。 \\ じゃ駄目なのですか?
633 :
デフォルトの名無しさん :04/12/30 00:11:35
C,C++で使用可能なライブラリ紹介してちょんまげ よろぴこー
\\\\
boost::regex
636 :
デフォルトの名無しさん :04/12/30 00:38:42
>>634 まじですか。
\\\\
できました。
すげー。ありがとうございます。
Perl互換はPOSIX互換じゃありまへん。 そこんとこ一つよろしく。
>>638 PCRE の POSIX 互換 API って実は互換でないの?
POSIXは完全に全てのパターンを*もれなく*検査して 最終的にもっとも長いマッチを抽出するけど、 Perl系は途中で検査を打ち切る。 この動作を嫌う人はイヤなんだよね。
641 :
WZエディターで :05/01/02 19:24:05
置換を使って、 \tと\nの間にある、ランダムな文字、数字を消したいんですが、 どうしたらいいですか?
「特定の文字列以外」を別の何かに置換したいのですが どうすればよいのでしょうか? たとえば 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])*
645 :
641 :05/01/02 20:42:06
有り難うございます。しかし、出来ません。
>>643
>>642 言語に依存するけど、とりあえずhogeにマッチさせてpreとpostだか位置情報使うとか。
>645 何の正規表現? 複数行サポートしてる?
648 :
641 :05/01/03 13:00:11
>>643 、
>>647 すみません。 出来ました。 置換ウインドウの正規のポッチを押のを忘れてました。
が、しかし、リクエストを変えます。
置換を使って、
\tと\nの間にある、ランダムな文字、数字、空白、記号、を消したいんですが、
どうしたらいいですか?
649 :
641 :05/01/03 13:02:19
つーか、\t[^\t\r\n]+\nだと、 ACIDTECHNO 160BPM BASS 4.zip は、検索に引っかかるのですが、 ACIDTechno Club Grooves.zip は、検索にひっかからないのです。
650 :
641 :05/01/03 13:04:05
つーか、\t[^\t\r\n]+\nだと、 ACIDタブTECHNO 160BPM BASS 4.zip改行 は、検索に引っかかるのですが、 ACIDタブTechno Club Grooves.zip改行 は、検索にひっかからないのです。
少しぐらい自分で考えようとか思わないのかね。 \t[^\n]+\nなり\t[^\r\n]+\nを試してみれ。
652 :
641 :05/01/03 14:09:44
それもダメでした。
>>651 で、 \t[^痺]+\n ってマズ使われないであろう、漢字をいれたら、
うまく行きました。 WZエディターが変なのかな?
やっとソフト名が出たよ。やれやれ。
656 :
デフォルトの名無しさん :05/01/05 01:14:16
VxeditorというBREGEXP.DLLを用いた正規表現が使えるソフトにおける話です。 十分な改行のみが含まれるテキストファイルにおいて、\n\nは思ったようにヒットするのですが、 \n\n\nのように3つ以上続けると全くマッチしません。これは何故なのでしょうか、ご教授ください。
"2十円"を"20円"に変換するような正規表現の置換えを組みたいのですが $aaa = "2十円";の場合 $aaa =~ s/([2-9])十/\10/; とか $aaa =~ s/([2-9])十/\1\0/; では後方参照と認識されて上手くいきません 後方参照+半角数字を置き換えられる方法を教えてください
perlなら $aaa =~ s/([2-9])十/${1}0/;
>>658 ありがとうございます。無事置換え処理ができました
660 :
デフォルトの名無しさん :05/01/09 12:33:04
質問です 例えば def method(): とあった場合に、”method”の部分のみを検索するには どのような式になりますか?
method
662 :
660 :05/01/09 12:44:51
すまん説明が足らんかった...orz その他にも def aaaaa(): def bbbbb(): などがあって、要は”def”と”()”の間のみを取りたいんです
def\s([^(]+)\(\)\:
def\s(.+?)\(.*?\):
666 :
デフォルトの名無しさん :05/01/13 21:10:25
プログラムも正規表現も素人なんですが サクラエディタの正規表現置換で単語の先頭を大文字、その他を小文字 としたいのですが 検索文字列は ([0-9a-zA-Z'{]+) で単語を拾えるのですが 置換文字列は \L\u\1 だと変換できません、単にLやuが入るだけです。 それではと思いTerapadの正規表現プラグインの置換文字列 <\1>>\2< と言うのも使ってみましたが無理でした。 サクラエディタのスレでも聞いたのですが、詳しい方が居ないようです。 マルチになってしまいますが、2日ほど開けたのでお許し下さい。 正規表現のサイトもいくつも見たのですが、 検索文字列はいくつも書いてあり、参考になりましたが バカなのか置換文字列に関することを見つけ切れませんでした。 よろしければ、どなたか詳しい方解説お願いします。
667 :
666 :05/01/13 21:12:11
あ、terapadでの検索文字列 ([0-9a-zA-Z'])(\a*) というのでも試してみました。
連投申し訳ありません。 terapadでは前出の方法で英単語の頭を大文字、その他を小文字に置換できます。 例 I'M NOT IN lOVE, SO DON'T FORGET IT が↓ I'm Not In Love, So Don't Forget It
正規表現はあくまでパターンマッチングなので、 その後どう処理するか(この場合は単語のキャピタライズ)は処理系依存になります。 PerlやEmacsなどの定番ツールなら別だろうけど、ここでじゃなく エディタの専用スレもしくは掲示板の方が回答を得られるんじゃないかな。
>>669 そうだったのですか、
ありがとうございました。
正規表現で条件を二つ重ねることって出来ませんか? 正規表現1 && 正規表現2 みたいなかんじで。
>>671 処理系によっては可能かもしれない。
#!/usr/local/bin/ruby
require "eregex"
p "foobar" =~ /foo/ & /bar/
処理系によっては可能かもしれない。 perl の場合: (?=foo)bar
正規言語と正規言語の積は正規言語っしょ? それを受理するオートマトンは、 2つのオートマトンの状態の積を作ればよい。 いや、なんとなく専門用語を並べてみただけ。実はよく知らん。
>>674 欲しいのはマッチした結果の論理積だから無理だろ。
正規表現エソジソを作るのに参考になるお勧め書籍あります?
boost::regexのソース。
は糞
_ ___ ∧∧ _ 人人人人人人人人人人 /⌒\ \ 〔〔 |Ξ (,,゜Д゜)つ /⌒^\\ < > //⌒\ |◎| _/ ||Ξ/ つ¶¶ / /⌒\|◎| < はくそリーナへ / )|日|\/__\|/ ̄ ̄ ̄ ̄\ _____.|日|\_ < > / ● ___ \|/ ● ●/\  ̄\__〉 ∨∨∨∨∨∨∨∨∨∨ / 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
となりましたが、おかしいですよね?ちなみにサンプルはいじっていません。
あるいは、どこかにこれと同じぐらい小さいライブラリってないでしょうか。
機能はある程度削ってあってもいいので。
すいません、よく解説を読んだらこれでいいみたいです。 [0]は正規表現にマッチする部分全てで、 [1]以降は( )でくくった部分正規表現の結果が入るということでした。
正規表現エンジンのオーソドックスな実装ってどんな感じ?
それは、車輪の再発め(ry
>>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個作るにはどうしたらいいでしょうか?
perlかなんかでスクリプト書け。そっちのほうが話が早い。
689 :
デフォルトの名無しさん :05/02/19 03:57:31
perlなんて本屋さんで見かけますが、まったく知りません。
690 :
686 :05/02/19 04:36:20
(^.*), これで、フィールド1の最初の数字が変数1に抽出できますか?
691 :
686 :05/02/19 04:51:34
検索 ^([0-9]*), 置換 CD$1 なんてやってもうまくいきません。 ()が閉じていない、などとおこられます。
>>691 WZ5でそのまま置換できたぞ?
どこで()でなんとかって怒られるんだ?
マクロか?
693 :
686 :05/02/19 20:43:32
>>692 WZ5の置換タブを開き、正規のポッチを押して
検索には ^(.+),"(.+)","(.+)"
置換には (\3) \2 CD\1
で、OKを押すと
「正規表現 ()が閉じていません」
とゆうエラーメッセージが6回出てきます。
>>693 うちのWZ5ではそのままでできた。
君んとこのWZの問題だろう。
695 :
686 :05/02/19 22:17:49
696 :
686 :05/02/19 22:20:32
>>694 了解しました。 多分どこかの設定が悪いのかもしれません。
「じゃあその手段でやってやるからとりあえず手順を教えろ」か…。
698 :
686 :05/02/20 19:01:48
へへっ、つーかWZ5を再インストールしたら、
>>693 のやり方でばっちり出来ました。
ちなみに、
>>693 ぐらいが書けるのは、正規表現の入門者、初級者、中級者、
のどのへんでしょうか?
これで、
>>696 の問題は解決したのですが、
>>687 はWZ5のマクロでやろうと思います。
2ch内にWZマクロのスレッドなんてないでしょうか?
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";
$in の設計から見直してみるのも一興かと。
702 :
デフォルトの名無しさん :05/02/24 23:16:36
>>702 あ、いや、すまんす、題意を勘違いしてた。
というか、質問の意味がわからんのだけど、これと正規表現とどう関係が?
704 :
デフォルトの名無しさん :05/02/24 23:49:15
$in{'arg_0'}<>という繰り返しが何度も出てくるので、正規表現を使って短く書く方法があれば、教えていただきたく思い質問させてもらいました。 正規表現では無理なんですか?
やれやれだ。
test1 = '111' test2 = '222' test3 = '333' で、111と222を取り出したい場合 検索と置換にはどう書けばいいんでしょうか
710 :
デフォルトの名無しさん :05/03/19 17:30:45
正規表現が勉強できるサイトを教えてください
712 :
デフォルトの名無しさん :05/03/20 08:05:55
偶数回(0回を含む) / が出現した直後の単語を抽出することは可能でしょうか?
最短マッチにしたうえで (([^/]*)|.*/.*/(.*))で$2と$3を取り出すとか適当なことを言ってみる
前方に「/」が無い「//」の連続(つまり、「/」が偶数個)の後の、単語構成文字の連続、って感じかなぁ。 (?<!/)(?://)+(\w+) 状況がよく分からないので細かいところは適当にいじってくれ。
715 :
デフォルトの名無しさん :05/03/20 23:01:47
<id="id" property="prop" text="text"/> こういうタグがあったとしてproperty="prop"の""内が全て英小文字かって どう書きますか?
エイホ、ウルマン、セシィの「コンパイラ 原理・技法・ツール」を読んでいてふと疑問に思ったのですが、 正規表現からは機械的に有限オートマトンを構成できますが、 逆に有限オートマトンから機械的に正規表現を構成する方法っていうのはありますか? 「この本読めば載ってる」とかでよいので、情報があったらよろしくお願いします。
>>716 > 逆に有限オートマトンから機械的に正規表現を構成する方法っていうのはありますか?
あります。
> 「この本読めば載ってる」とかでよいので、情報があったらよろしくお願いします。
シプサーとか。
>>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自作した人いる?
またアンケートか?
722 :
デフォルトの名無しさん :2005/04/04(月) 22:12:14
>>721 俺も作ってみたいんだよね。
教科書は読んだけどそれだけじゃ足り無そうだからさ。
先月作ってた。wchar_t決めうちのだけど。 事前に思ってたほどには難しくなかった。NFA、DFA、オートマトン、 このあたりのキーワードさえ押さえておけば、一通りの機能は 実装できると思う。 配布されているライブラリ並みに高速化を図ろうとすると、 ちと苦労するかもしれんけど。 自分で実際に作ってみると、検索効率の良い正規表現と悪い表現とが 身に染みて分かるので、なかなかいい勉強になった。
724 :
デフォルトの名無しさん :2005/04/05(火) 08:24:20
>>723 wchar_t決めうちってことはNFAになるのかい?
それとも教科書的でない方法を使えばDFAでも実装できるのかな?
作ったものは公開してないの?
>>724 そう>NFA
公開は今のところしてない。それほど秀でたものでもないんで…
726 :
デフォルトの名無しさん :2005/04/06(水) 07:15:18
>>725 そおか。
しかし、教科書の次に行くのに参考になるものが無いような気がするので、
作り始めのソースなんておいしそうなんだけどなぁ。
ほしい人たくさんいそうな気がする。
俺もほしいけど。
機能満載で技巧凝らしたようなソースになっちゃうと読むのが難しいよ。
728 :
デフォルトの名無しさん :2005/04/06(水) 08:06:50
>>727 ありがと。
ちょっと難しいね。
ビットマスクになってる部分を動的配列にすると日本語も使えるようになるのかな?
そんな簡単じゃないんだろうか?
>>728 自分が使ったのは、文字コードの範囲を動的配列に押し込んでゆくという方法。
[0-9@]なら、0x0030-0x0039, 0x0040-0x0040という具合に。
ただビットシフト+マスクを使う方法に比べると、if文を通る回数が増える分、
速度の点ではやっぱり不利。
何かうまい文字クラスの扱い方があればいいんだけどねえ。なかなか思いつかなくて。
正規表現って 規格ありますか。 ANSIやPOSIXとか。
731 :
730 :2005/04/10(日) 01:26:42
>>730 自己レス。
POSIX 1003.2
・Basic Regular Expression
・Extended Regular Expression
ある正規表現が与えられた時、 それにマッチするものが(例えば) "a" から始まる文字列の中にのみあるか、 そうとは断定できないか判定する方法はないでしょうか?
>>732 マッチする関数やメソッドに (例えば) "a" から始まる文字列を実際にくべてみる。
うーん、マッチングを試みる対象を事前に絞り込めたら 嬉しいのですが。
>>730 自作するのなら、ECMAScriptのそれに倣うという手も。
確かboost::regexもそうだったはず。
>>736 事前に辞書順にソートされてるファイルに対しマッチングをしたいのです。
ちなみに与えられる正規表現が "^" から始まる事は保証されています。
んじゃ^の次が何かを調べれば最初の一文字がどうなのか一発で分かるだろ
^[a-f]?[x-z]?
>>732 まず、よほど速度が気になるのでない限り、何も考えず普通にマッチを試した
方がいいと俺は感じる。(正規表現とは無関係なソフトウェア工学的センスの話だけど)
で、ふつう、マッチする最初の1個を調べる作業は、ファイル全体を調べるよりは
効率がいいよね?もしこれが
>>732 のケースでも成り立っているなら、...
1. 一番最初にマッチするもの一個のみを調べる。その行番号L1を覚えておく。
2. ソートされたファイルを、上下逆順に並べ替える(or逆順にソートする)。
3. 逆順のファイルに対して、一番最初にマッチする行の行番号L2を覚えておく。
4. N1〜(全行数-N2+1)までをsedとかで切り出して、その間で本当のマッチング。
する戦略は、候補のひとつだと思う。
741 :
740 :2005/04/20(水) 21:23:31
あ、typoスマソ。L1==N1、L2==N2ね。
保守
743 :
デフォルトの名無しさん :2005/05/30(月) 21:15:59
age
行頭と行末にダブルクォーテーションを1つずつ付けたいのですが、 正規表現ではどのようにすればよいでしょうか。
>>744 フォーマットなら環境依存。エディタならそのエディタを書いたほうが吉。
>>744 が使ってるのが Perl なら俺はエスパー。
$text =~ s/^(.*)$/"${1}"/gm;
>>745-746 すいません。秀丸エディタなのですが、${1}の部分を
どう表現すればいいのかが分からないのです。
749 :
746 :2005/05/31(火) 12:42:46
orz
ある文字列のある語(複数)を置き換えた上で複写したいのですが、 どう書いたらいいでしょうか?Java です。 処理前 abc@def@abc この文字列の abc を ABC にして複写。 処理後 abc@def@abc ABC@defABC
>>750 何も難しいことはないと思うんだが、何がわからなかったんだろう。
String one = "abc@def@abc";
String another = one.replaceAll("abc", "ABC");
752 :
747 :2005/06/01(水) 20:41:54
すいません。いまだに自己解決できないので どなたかお願いします。
753 :
746 :2005/06/01(水) 20:59:37
>>751 それだと、
処理前
abc@def@abc
処理後
ABC@defABC
ですね。
ではなくて、
処理後
abc@def@abc ABC@defABC
にしたいのです。
Cで性器表現を扱えるライブラリはありませんか?
>>754 ああ、なるほど。
でも、
>>751 の後 one + " " + another で文字列繋げりゃいいだけでは?
(「@」の扱いがよくわからんが)
>>756 flexは字句解析用。それ向きに正規表現を使うならいいけどさ。
正規表現のマッチとかだけを扱いたいならregex(3)あたりでしょ。
re_comp(3),re_exec(3)という関数名だったり、regcomp(3),regexec(3)...
という関数名だったりするから、その辺でmanしてみ。
regexという同じ呼び名で、違うバージョン違う仕様のものが
多数あるから注意してね。つうか、詳しい人解説よろ。
boost::regexにはPOSIX互換のインタフェースもついてて それのwchar_t版もあるから、日本語使うには便利だよ まあ大概の正規表現ライブラリにはPOSIX互換インタフェース ついてるけどね
ああ、それなら鬼車とかいいんじゃないの。MBCS対応で、 Rubyとかでも使われてる正規表現エンジンだよ。
普通PCRE
PCREってUTF-8になんちゃって対応してる程度だから日本語で使うのはどうよ って雰囲気だったのだが、最近は違うの?
鬼車、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
Makefileぐらい自分で書き直せばいいだろ
フツーにmake書けばどのランタイムを使用してもサフィックスは全部.obj makeだとかなりバッチ風になっちまうんでbjamみたいな方向がいいかも。
>>753 ありがとうございます。やっとできました。
770 :
デフォルトの名無しさん :2005/06/04(土) 08:41:41
Cで書かれた小さい正規表現ライブラリを探しています。 ソースが10KBぐらいのものでありませんか?
ありません。
ワイルドカード用なら小さいのが沢山あるけどな。ファイル名の”*”の処理のやつ。
>>771 どういう調査をしてその結論に達したのか報告書を
まとめてください。
見ず知らずの奴のためにそこまでしなければならない理由を完結に述べよ。
>>774 イヤならいいですよ。ただあなたの発言に信頼性がないというだけの話ですから。
>>774 にとってはイヤだからやらないと思われた方がいいんだろうな。
本当はイヤだからじゃなくて能力の問題だから。
急速にスレの質が低下してまいりました
いや別に変わって無いけど……
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.*【/【/
s/【項目】.*【/【/s
IPアドレスが抽出できません、、 どうやればいいんですか?
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
787 :
デフォルトの名無しさん :2005/07/17(日) 17:06:15
マルチだから教えてやんない
789 :
デフォルトの名無しさん :2005/07/17(日) 17:25:30
うん。マルチ
マルチだから教えないとかじゃなく 単に分からないだけかと思われw
別のスレで既に解答でてるはずだが
正規表現も知らない池沼が常駐するスレでつね
文江
文枝
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 には適用しても意味がないだろうが、行中で場所を入れ替える
なんてことをやる場合も時々ある。(特定のカラムを先頭に移動するとか)
どうみてもマルチなんだが
>>785 >>797 でもいろいろ書いてくれてるけど、役割が違いすぎ。
適当なスクリプト書いたほうが早いよ。
置換したいとことしたくないところを分割して(固定長ならいくらでも方法がある)
置換したいとこだけ置換して(パターンが決まっているわけじゃなくて単純置換なら正規表現不要)
全部くっつける、ってことだよね。
>>785 を落としてやってみた
うーんメタキャラの判定とか甘いな
>>785 にあるように
ABCD → 12C3
BCDE → 45D6
にしたいっていっても、
テキストの上から順に判定とかじゃなくて
左から判定している悪寒
無理っぽい
長くポストのなかったこのスレにクソ質問と同時に湧いてくる
>>788 ,
>>791 ,
>>793 あたりを見ると
>>785 本人がやってるとしか思えん。
そもそもマルチしたのを開き直るようなやつにレスすんなよ。
なにが全然回答になってないだよ。アホか。
そんなこと知らんよ。
大分前からここ巡回に入れてる者だが。 この話題にはまるで興味無いんだが、 ポストが無いとかよくわかんねー理由で自演認定するのはやめてくんねーかな。 それに、その文脈で言ったらお前も >785 ってことになるんじゃないのか?
>>801 薄識の自治厨はPC初心者板にカエレ(・∀・)
普通に考えてここまで粘着に答えを欲しがってる奴が自分にレスするなって言うかね。 とりあえずマルチと自演は死んでくれ。
805 :
802 :2005/07/20(水) 13:45:34
801 が自演かどうかなんざどうでもいいんだがな。 伝わらなかったか?
マルチがダメって奴は正直理解できん。別に全然かまわんだろ。 他の奴にも聞くなんて貴様、俺様が信用できないのか!ってか。 もう幼児的万能感丸出し。馬鹿じゃねえの信用できないに決まってるでしょ。 こういう人は医者にはならないで欲しいね。 セカンドオピニオンだと!(怒)もうあなたを担当するのはお断りだっ!みたいな まあマルチそのものが悪いのではなく、回答者に謝意を表さないのがいけないというのなら 心情的にわからんでもない。 でもアンタ、回答するのだって(質問者と同じく)アンタ自身のエゴでやってるってこと 忘れてないか?
マルチだと回答済みの質問に回答を書いてしまうことがありえるし。
>807 例えが悪い。マルチは複数の医者に同時にかかっている状態。
どーでもいいが、netnewsみたいにクロスポストのない掲示板でマルチ、マルチと騒ぐのもな。 マルチポストってのはクロスポストがあってはじめて非難されるべきもんだろ。
>>809 うん。分ってる。
だからセカンドオピニオンを例えに出した。
質問者側がマルチするのは勝手にしてくれて構わない。全然問題ない。 だが、回答者側がマルチをダメと言うのも、当然質問者と同じく勝手にしても構わないだろ? ダメと言われたくなければ、言われない所でマルチをすれば良い。 君の例えで言うならセカンドオピニオンを用意するときに、 それを嫌だという医者を使う必要はない。それでも構わないという医者のところに行けば良いだけだ。
813 :
812 :2005/07/21(木) 01:27:57
まぁ俺自身は興味ないからマルチもそれの排除もご勝手にって気分。
>>807 マルチがダメだって言うのは俺様が信用できないのか?って事じゃないだろ。
マルチするのは本人の勝手 マルチに教えないのも勝手 好きにすればいい
マルチ禁止の不文律を知らない者をよそもの認定して排他行動してるんじゃないの。 問題の本質はマナーじゃない気がする。
↓というわけで、次の質問の方どうぞー。
質問です このスレの住人には「スルー」という概念がないのでしょうか? スレ違いでしょうかね^^;
>>820 お望みどおり、スルーしますね。
↓というわけで、次の質問の方どうぞー。
文枝
>>818 その「有り難い」ってのが排他行動だっての。
そっちのスレはそっちのスレ。
こっちのスレはこっちのスレでマルチに進めれば良い。
マルチにつきスルー推奨
>>825 マルチがダメって奴は正直理解できん。別に全然かまわんだろ。
827 :
デフォルトの名無しさん :2005/07/22(金) 02:41:16
ふーん、よかったね
>>826 お前が教えてやればマルチがダメって奴は手も足も出せない
829 :
デフォルトの名無しさん :2005/07/22(金) 09:11:34
>>828 お前みたいな馬鹿がいるからあちこちで同じ事を聞かなければいけなくなる訳だ。
信用できねーもん。
教えてやらなければマルチは手も足も出せない
はわわ
マルチだからスルーだとか スレ違いだとかと言い出す自治厨を標榜している奴に限って た い し た 知 識 を 持 ち 合 わ せ て い な い の で と り あ え ず 難 癖 つ け て 叩 く ということでFA?
それとお前と何がどう違うのか
>>832 お前が教えてやらないのは何故
アホだから?
マルチ庇護派って孤軍奮闘って感じだな。 ああ、あほらしくて眠い。
このスレ最初から機能してないからな。 「正規表現」って何ですか?レベルのクズの質問ばっかだし。
確かにそんな感じかも知れませんねぇ ところで正規表現って何ですか
真理です
共通性を見つけて無駄を省く ようするにマルチの排除
テキストから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 と言う具合に第一オクテットはひと桁になってしまう。 理由が分からず困ってるので、誰かお願い。
>>840 ^.* が最も長くなるところでマッチしている。
>>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アドレスの前に数字があると駄目だね。
汎用的に使える正規表現はどんな物なのだろうか?
自分でも考えてみるけれど解が有るならばどうかよろしく。
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\
$RE{net}{IPv4}
845 :
840 :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の受信料を支払う気は全くありません。
NHKの受信料を支払う気はさらさらないが,
>>847 のような愛國戰隊大日本糞野郎なんかと
同じ理由であるかのように誤解されたくはないものだな...ってかスレ違い
>>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を選択する正規表現はどのように書けばよいでしょうか? 複数行は漏れにはむりぽ。。。
まずは何で実装しようとしているか示そうな。
852 :
デフォルトの名無しさん :2005/08/16(火) 14:22:25
正規表現は抜け毛が減りますか?
853 :
デフォルトの名無しさん :2005/08/16(火) 14:58:41
正規表現はスキーマですか?
infoseek
grep -a ?
正規表現による軸解析じゃなくって どっちかというとパーサだな。 rubyだとこんなモジュールがある。 html.findattr("a", "href") { |url| if url == '../' then "index.html" else url end }
>>857 リンクの抽出とかタグの検索とかをイテレータで処理する奴。
階層構造処理をやらんのでHTMLが壊れていても動く。
アップして欲しい?
860 :
デフォルトの名無しさん :2005/08/19(金) 16:09:15
"(〜)^(〜)^・・・^(〜)" ("〜"は1文字以上の任意の文字列、"(〜)"は2個以上) これをマッチさせ、 それぞれの"(〜)"をグループとして順番に抽出したいのですが、正規表現ではどう書けばよいでしょうか。 ご教授お願いいたします。
正規表現だけでは無理だと思う。 実装する言語のループの機能を使ってひとつひとつ抽出することになるかと。 何で実装しようとしているのがわかれば答えれるかも。
863 :
デフォルトの名無しさん :2005/08/19(金) 23:39:10
>>863 "\\(.+?\\)(\\^\\(.+?\\))+"でマッチさせてそれ使えば出来ますね。
判りました!ありがとうございました!
性器表現
卑猥な言葉を連呼するんじゃない
>>865 その突っ込みは「詳説正規表現」でも日本人でもない著者が入れている。
868 :
塾講師 :2005/08/22(月) 03:53:30
run 走る eat 食べる speak 話す watch 見る ・ ・ ・ といった感じの単語テキストを作ったのですが この日本語だけを削除したいです。(中学生のテストのため) 秀丸の正規表現ではうまくいかなかったので、教えて下さい。 手間は惜しみません。
>>868 その他(O)→動作環境(E)→正規表現が HMJRE.DLL に
なっているのを確認した上で、
検索(S): ^[a-z]+\f.+\n
置換(R): \0\n
「正規表現(R)」にチェック
正規表現のよい入門書を教えてください
うーん、実装は無理だな。
正規表現について何も知らない状態から読んでも、大丈夫でしょうか?
大丈夫ってどういう意味か知らんが、別に読んでもかまわんよ
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のどちらかがある場合にマッチするようにするにはどうしたらよいのでしょうか?
(ABC|XYZ)
881君みたいなのが正規表現を知ってるってことに驚いたさ
881 それがおいらの口癖さw このスレの年齢層にマッチするか
885 :
デフォルトの名無しさん :2005/08/28(日) 01:37:31
はいはいわろすわろすギャハハハハハハハハハハハハハハアハハハッハハハハハハハハハアアハハアハッハハハhh
>>884 $str = "881 それがおいらの口癖さw";
$str =~ m/このスレの年齢層/;
perlではマッチしなかったよ
XYZを含まないという条件はどのように書けばよいのでしょうか?
888 :
デフォルトの名無しさん :2005/08/29(月) 04:27:46
(?:(?!XYZ).)*
>>887 普通にXYZにマッチさせて否定をとる。
perlで書くなら
$t !~ /XYZ/;
>>888 よりオートマトン短くなるから。
俺も思ったけど正規表現スレだしなぁ。それに index 使うだろうしね。
正規表現を使うべきでないケースで「使うべきでない」と指摘するのもこのスレの責務の一つかと。
んじゃ、あまりにも基本的な「使うべきではない」ケースだけ。 単純な文字列を探すだけなら、正規表現を使う必要はない。 例) ・"XYZ"を含む ・"XYZ"を含まない ・先頭(or 末尾)が "XYZ" である etc. index()なり、strstr()なりの方が、遥かにコストが安い (1/100 程度で済むこともある)。 perlの場合、オプティマイザがある程度は面倒を見てくれるけど あまり期待しすぎないように。
何かの間に挟まれてる文字列が欲しい時って正規表現と index2回どっちが速いの?
>>893 どこに挟まれてるか、何文字目にあるかあらかじめ分かってる場合なら、
substr() を使った方が良い。
C の話をしてるのか Perl の話をしてるのかこんがらがってきた。
関数名おなじだからね…。 Cなら正規表現の方が重いの、すぐ分かるだろうけど。
じゃあC++のstd::string::find vs xpressiveで。
899 :
デフォルトの名無しさん :2005/08/31(水) 00:02:04
メールアドレスにマッチする正規表現を書ける兵はいますか? コピペじゃなくて。
正規表現の限界を超えているので無理。
>>899 以前書きました。RFC読んで。長いよ、すごく。
gTLD増えていくから、ちゃんと書いても、アップデートしなきゃいけない。
正規表現を使うべきでないケースの典型例ですな。
903 :
デフォルトの名無しさん :2005/08/31(水) 01:12:58
使うべきかどうかなんて問題ではない それだけのスキルがあるかどうかの話
使うべきでないときに使わないと判断できるかどうかが本当のスキル。
905 :
デフォルトの名無しさん :2005/08/31(水) 01:29:15
[!$%&*\-./0-9;?a-z^_~]+@[\-.0-9a-z_~]+\.[\-.0-9a-z_~]+ これじゃだめか?>メアド
なんでそこまでぴっちり表現したいのかわからん。
>>905 それでダメかどうかは使われる状況によるのでなんとも言えないと思う。
もちろん、それで十分なケースも多いと思うけどね。
908 :
デフォルトの名無しさん :2005/08/31(水) 01:52:53
どのていどの妥当性をもって良しとするか前提がない以上 およそ想定しうるすべてのメールアドレスに対応する正規 表現を記述しようと試みるのは愚の骨頂といえよう
なんで携帯キャリアは誰も喜ばないのにこんなくだらない処理をするんだろうな うぜぇ
916 :
1/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を使ってみたのですが、どうもうまくいかないです)
一文ではなくてもいいので、何か解決方法がありますでしょうか。
917 :
1/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点なのですが、もし宜しければお願い致します。。
918 :
2/2 :2005/09/01(木) 11:20:49
上の名前欄、「2/2」に直し忘れていました・・。
^([0-9][0-9][ |_|\-]).*[mp3|wav|wma]$ 条件に一致したファイル名だけを取得する方法ありませんか?
^(([0-9][0-9][ _-]).*\.(mp3|wav|wma))$ で後方参照で取得できると思うけど。 Perl なら $1 とか。 で、処理系 (言語とか) を書かないのには何か宗教的な理由でもあるのかね?
922 :
デフォルトの名無しさん :2005/09/13(火) 22:22:07
>>920 自明に、正規表現にマッチしたファイル名を表示すればいいんじゃないの?
何を聞きたいのかわからんなあ。
ちなみに
>>920 の正規表現はちょっと独特だぞ。
[|]とか。前半を()でくくる意味もないみたいだし。
ls `grep ^([0-9][0-9][ |_|\-]).*[mp3|wav|wma]$` でできるのかな?'<'とかいる?
環境はwin?拡張子からして
925 :
デフォルトの名無しさん :2005/09/13(火) 23:18:12
`でも<でもなく、|。 ls | grep ... とかする。 でもそもそもWinなのか? っていうふうにいつまでも周りの藪をつついてまわって本題にたどりつかん。 まー2chじゃよくあることだがな。
もうさ、処理系とか実行環境とか書かないのはスルーでいいんじゃね?
多分もともとは処理系だの実装系だのの話じゃなくて もっと理論よりの話がしたかったんじゃないかな たぶん
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 オプションでいいやん。
そんなん先っぽから舐めるだけでわかるような内容に でろでろに舐める正規表現使うな、いやらしい、けしからん、 セクハラだ
>>931 テキストエディタで、特定の文字列を
含まない行を置換で消したい場面が往々にしてあるのよ
934 :
デフォルトの名無しさん :2005/09/29(木) 23:18:15
>>933 あるパターンを*含まない*行を削除する機能は大抵のエディタにあるだろ。
少なくともviにもEmacsにもあるぞ。
ついでにいうと、大抵のエディタには、今見てるファイルの内容を外部コマンドに
渡して(例えばgrep)その出力結果で置換する機能もあるだろ。viやEmacsならある。
上のどちらかができないエディタって具体的になによ?
てか、予想通り正規表現には関係ない話だってわかったから俺はもういいや…
それを正規表現でやると非常にめんどくさいから だれもそんなことしない
sed /XYZ/d でおしまいだもんな
>>933 それならそれで、使っているエディタの種類も書かずに
>>930 みたいな質問をするというのはどういう了見なのか?
>>930 置換前:[^.*XYZ.*\n]
置換後:[]
おじゃましますよ。 C#のプログラムの分析をしたくてソースコードの簡易なパーサーを作ろうとしているのですが、こういうのに正規表現は向くんでしょうか? 調査中で、正規表現はずぶの素人なので指揮者の方お願いします。
>>940 分析の内容次第ではきちんと構文解析する必要ないかもしれないが、一般的には
たぶん向かない。というかその手のことをやろうとしてるのに自分で判断つけられない
ようでは基礎がなってないと思うので、せめてコンパイラの本の構文解析のあたりの
ところまでは読んどけ。
>>941 yacc&lexも正規表現使ってますが何か?
正規表現は再帰構造を扱えない つまりなんの役にも立たない 役に立てようとしたのがこの様
945 :
デフォルトの名無しさん :2005/10/23(日) 02:35:24
正規表現にマッチする正規表現を賭ける猛者はいますか?
括弧の対応を取らなきゃいけない時点でアウトなのでは?
947 :
デフォルトの名無しさん :2005/10/28(金) 01:45:27
そんなことはない
正規表現の境界が決まりなくない?
そんなことはない
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
おもんない
また使い古されたネタを……。最低だな。
ナイスブルマ
まだ40も残ってるのに 馬鹿な早漏君だ
おまいらお勧めの正規表現を羅列しながら埋めるんだ
. これ最強
964 :
デフォルトの名無しさん :2005/11/12(土) 14:59:32
正規表現をこれから学ぼうと思うのですが、お薦めの入門書を教えてください。
O'REILLYの詳説 正規表現とか。 高いけど。
正規表現むずかすぃ・・・ つくっても何でその表現だと引っかからないのかがわからんです・・・ なんかテストツール見たいのものってありますか?
txt2regex みたいなの?違うか。
んーちょっと違うかも。 いま作ってる正規表現のどこがおかしくて意図した動作をしないのかを検証するツール。 ひっかからないとしてどこで引っかからなくなってるのかがわかりやすいものがあればと。
それは大物を狙いすぎです。
オレははまったときは部分パターンを抜き出してテストしたり、 適当にカッコ挿入してキャプチャーしてどこまでマッチしてるか 表示させたりみたいな地道なことをやっている。
>>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"とすると認識されないです・・・
973 :
972 :2005/11/14(月) 00:05:49
書き忘れましたが.NET2.0 ようです。
974 :
デフォルトの名無しさん :2005/11/22(火) 00:50:32
秀丸の正規表現による置換で 行頭がhttpで始まる行を削除し\nに置換したいのですが 正規表現の書き方を教えてもらえませんか
>>974 ^http.* を 空の文字列に置き換え
976 :
974 :2005/11/22(火) 01:02:42
>>975 ありがとう
置換前 http..*\n
置換後 \n
でもデキマスタ
978 :
974 :2005/11/22(火) 01:09:00
979 :
デフォルトの名無しさん :2005/11/23(水) 12:48:08
ntaich073055.aich.nt.adsl.ppp.infoweb.ne.jp これを正規表現に直すと、どうなるか教えて下さい
ntaich073055[.]aich[.]nt[.]adsl[.]ppp[.]infoweb[.]ne[.]jp
>>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
うめ
ume
産め
梅
梅
梅
梅
正
規
表
現
(正|規|表|現)
埋めるの飽きた
10{3}
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。