1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ] 正規表現(Regular Expression)スレです。 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 前スレ 正規表現 Part4 pc11.2ch.net/test/read.cgi/tech/1186030400/
413 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 14:52:11 ] そのツールでうまくいくかどうかわからんが パターン testA\n.*?testEndA\n 置換文字列 testA\n1週間前\n2週間前\ntestEndA\n でいいのか? 何を期待してるのだかよくわからんが...
414 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 14:59:43 ] 処理系によってはドットは改行とマッチしないので注意。
415 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:38:18 ] 正規表現に通じている先輩は正に魔法のように正規表現を使ってあらゆるリクエストに解を提示している。 あんな人になるには一体どうすればいいんだろうか?
416 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:57:27 ] とりあえずふくろう本は読んだか?
417 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:46:38 ] やっぱりあのそこそこ分厚い青い本に挑戦したほうがいいみたいですね。TODOリストの一番上に上げときます。
418 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 23:15:54 ] 正規表現って何なんだよ 表現に正規も糞もあるか!
419 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 23:20:45 ] 正則表現という訳も、あるにはある。
420 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 00:25:47 ] 「正規表現」という表現は、確かに適切でない。 では何が良いかといわれると、判らない。 明治時代の人々は、偉大だった。
421 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:38:54 ] regular expression を無理やり「正規表現」と訳しただけ。 アテ字と言って過言ではない。意味を深く考える必要は無い。
422 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:39:30 ] 「帝王切開」 みたいなもんだな。
423 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:53:00 ] は?
424 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:54:53 ] 洗濯を選択だな
425 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 13:49:35 ] 何それ気になる
426 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:37:48 ] 形式言語理論の分野では正則表現ともいう まあ今時の言語で使えるような正規表現はもはや正則言語で表現できる範囲を 越えてたりするんだけどね
427 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:05:57 ] 性器表現
428 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 22:00:13 ] モザイクやハレーションか。 「♪ヤッホー FORTRANランラン」並みに手垢が付いたネタだな。
429 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 22:07:24 ] >性器表現 >手垢が付いたネタ つまりエロ本のことだな
430 名前:デフォルトの名無しさん [2008/11/16(日) 14:47:16 ] よろしければ、お知恵をおかしいただきたいです。 "あるマックなどPCがあり、マックなどのコンピュータ" の文字列から、/マックなどの?(.+)/のような正規表現で、「PCがあり、」「コンピュータ」の文字列を 取得したいのですが、うまくいきません。この場合、どのようにするのがよいのでしょうか? よろしくお願いいたします。
431 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 18:58:39 ] >>430 環境を書け
432 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:46:20 ] 環境を書けば答えられるの?
433 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:51:09 ] 出来ない、というのも答えの一つだしな
434 名前:デフォルトの名無しさん [2008/11/16(日) 20:14:40 ] >>431 430です。 Ruby 1.8.6、UTF8です。 お願いします。
435 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:18:42 ] >>431 ほら、質問者が環境書いたぜ。 「出来ない」 って答えろよ。
436 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:21:20 ] 文字列を切り取りたいわけだろ? 文字列を切り取るには、何が必要だ? どこから、どこまで。スタートとエンドだ。 /マックなどの?(.+)/ これにはスタートはあるが、エンドが無い。 どこまで切り取ればいいのか不明なんだよ。 どこから・・・マックなどの? どこまで・・・ ←これを決めろ。
437 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:46:51 ] >>435 何なんお前 建設的なレスできないなら無駄なレスすんなよ
438 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:49:37 ] で?環境書けば出来るの?
439 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:51:20 ] うん
440 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:02:54 ] >>430 str = "あるマックなどPCがあり、マックなどのコンピュータ" re = /あるマックなど(PCがあり)、マックなどの(コンピュータ)/ puts re.match(str).to_a[1..2]
441 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:13:42 ] ↑↑ 氏ね
442 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 08:23:20 ] 次の マックなどの?(.+) もしくは行末までなんじゃないかな。
443 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 09:34:46 ] 片仮名と平仮名の境目で切るのかな。 状態を持つ物なら、何らかのプログラミング言語を使わないと。
444 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:32:29 ] 他人が勝手に仕様を決めていいのかよ
445 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:33:30 ] >>421 最初に訳した人が誰かは知らないが、regularの捉え方を間違えている。 正しいではなく、普通のと言う意味あいで(例:レギュラーガソリン) 汎則式とでもしておけば、初学者の違和感も起きないものを…
446 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:43:21 ] どうでもいいですよ
447 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 17:07:42 ] みんなチョムスキーが悪い
448 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:23:42 ] すみません。教えてください。 ●正規表現の使用環境 サクラエディタ ver.1.6.2.0 ●検索か置換か? 置換 ●説明 フルパスが記述されたテキストファイルをとあるソフト(画像ビューアのHamana)のリストファイルにしたい ●対象データ C:\Program Files\Windows Media Player\wmplayer.exe ●希望する結果 D=C:\Program Files\Windows Media Player\ F=wmplayer.exe 行末の直前の\を置換すればいいのかな?と思ったのですが 指定の仕方がわかりませんでした・・・
449 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 00:40:18 ] とりあえず 置換前:^(.*\\)(.*?)$ 置換後:D=\1\r\nF=\2
450 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:03:03 ] >>449 ありがとうございました
451 名前:デフォルトの名無しさん [2008/11/18(火) 12:09:47 ] <img width="120" height="180"> </img width="120" height="180"> <img width="120" height="180"/> という文字列をすべて width="120" height="180" width="120" height="180" width="120" height="180" にしたいのですが秀丸の置換で 検索→.* (.*)[/>].*$ 置換→\1 とやってるのですが width="120" height="180" width="120" height="180" width="120" height="180"/ と、さいごのスラッシュが消えません。 是非助言をください!・・・もう何時間もやってるんです(汗
452 名前:デフォルトの名無しさん [2008/11/18(火) 12:14:47 ] .* (.*?)[/>].*$ でいけました!お手数おかけしました!
453 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 09:31:33 ] とても大変だと思うのですが、よろしくお願いします。 ●正規表現の使用環境 Windows上で動く「Perl5の正規表現と互換性のある」とマニュアルに書いてある フリーの(今はシェアになっています)クリップボード拡張ソフト マニュアルには、参考事例として ・複数行のテキストに含まれている空白記号をすべて削除する [@ s/[ ¥t ]//gmk] ・複数行のテキストに引用記号をつける [@ s/^/> /gmk] などが書かれています。 ●検索か置換か? 置き換え です。 ●説明 窓の杜などからソフトウェアのファイルをダウンロードするときに、 そのソフトをレビューした記事のタイトルをダウンロード先フォルダの名前にしています。 しかし、記事からタイトルをコピーして、フォルダ名としてペーストするだけでは 「ファイル名には次の文字は使えません。」という警告をWindowsから受けてしまうことが頻繁にあります。 Windowsでフォルダ名に使えない文字を削除しつつ、無意味な連続する空行を削除し、 ペーストしただけでフォルダ名として使える文字列へと変換できる正規表現を考えていただけないでしょうか?
454 名前:453 mailto:sage [2008/11/20(木) 09:34:37 ] ●対象データ1 「改行」 Moo0 オーディオ再生器「改行」 コンパクトで軽快に動作し、直感的に操作できるオーディオプレイヤー「改行」 「改行」 for Windows「改行」 ●希望する結果1 (フォルダ名に改行を使えないので、全ての改行をアンダースコアに置き換えつつ1行の文字列へ) _Moo0 オーディオ再生器_コンパクトで軽快に動作し、直感的に操作できるオーディオプレイヤー_for Windows (先頭のアンダースコアはあってもなくても構いませんが、無い方がうれしいです) ●対象データ2 シンプルかつ高機能な音楽プレイヤー foobar2000 バージョン【0.9.5.6】 ●希望する結果2 (ここまでの変換に加え、連続する空白、TABをひとつのアンダースコアに置き換えつつ、さらに末尾の空白を削除) シンプルかつ高機能な音楽プレイヤー_foobar2000_バージョン【0.9.5.6】 ●対象データ3 (○アールはregistration symbolと呼ぶらしい丸の中のRなのですが、打てませんでした。) 1. Intel○アール Graphics Media Accelerator Driver for Windows* XP (exe) (20476KB) 14.36.4.5002 2008/10/24 ●希望する結果3 (ここまでの変換に加え、registration symbolを(R)へ、フォルダ名に使えない文字/をハイフンへ) 1.Intel(R) Graphics Media Accelerator Driver for Windows* XP (exe) (20476KB)_14.36.4.5002_2008-10-24
455 名前:453 mailto:sage [2008/11/20(木) 09:35:51 ] なお、Windowsでフォルダ名に使えない文字列は \ / : , ; * ? " < > | および 改行 とのことなので、これらを含まない形へ整形できたらと思います。 これらを一度に処理することが、正規表現で可能なのかどうかも分からないのですが、 もし、できそうなら、どなたか編み出してもらえないでしょうか? よろしくお願いします。
456 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 13:49:38 ] とりあえず、 s/[\\\/:,;*?"<>|]/_/g みたいな。細かい改良点は自分で考えなよ。
457 名前:デフォルトの名無しさん [2008/11/23(日) 00:32:05 ] ………[2バイト文字][改行] [2バイト文字] ↑このパターンを ………[2バイト文字][2バイト文字] にするにはどう書けばよいでしょうか?
458 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 02:19:43 ] s/\n//
459 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 02:39:08 ] >>457 テンプレくらい読め。 それにそんだけじゃ情報が足りなすぎだ。 どうせ元データは何百行とあるんだろう? どういう行とどういう行を連結したいのか位は明確にしろ。
460 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 05:14:10 ] ●正規表現の使用環境 Devas 3.4 ●検索か置換か? 置換 ●説明 各行先頭にある 空白4つと数字(1から85)、ピリオドを抜き出したい 例えば 1. 120.136.16.13:3128 2. 94.178.64.37:48018 79. pps.nntime.com:554 このようなIP+Portの前にある文字列のことです。 ●対象データ 1. 85.
461 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 05:28:19 ] ^ *\d+\. もし空白やドットが不要で通し番号だけ拾うのなら、 ツールにもよるけど ^ *(\d+)\. とか適当にアレンジして試しておくれ
462 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 06:36:22 ] >>460 それ、置換なの?
463 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 10:02:54 ] >>461 ありがとうございました! ^ *(\d+)\. これでIPとPortだけに置換することができました。
464 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:26:32 ] よろしくお願いします。 ●正規表現の使用環境 Flexible Renamer(Perl5互換) ●検索か置換か? 置換 ●説明 ファイル名の一部を別の位置へ移したい。 ●対象データ (日付)(場所)hogehoge というフォルダ名や (日付)(場所)hogehoge,jpgというファイル名 ●希望する結果 (日付)hogehoge(場所)や(日付)hogehoge(場所),jpgというようにしたい。
465 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:29:21 ] その日付や場所を特定するための法則は?
466 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:41:40 ] それぞれ 「()」 でくくってあります。ともに一緒の括弧だとまずかったりしますか?
467 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 15:56:36 ] ああ、その括弧は実際も括弧だったのねw
468 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:03:16 ] >>464 s/^(\(.+?\))(\(.+?\))(.+)(\..+)?$/$1$3$2$4/
469 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:43:45 ] ありがとうございます。 自分の悩んだ時間などウソのようにすっきり成功してしまいました。 今までも正規表現を使いたいと思って色々サイトを巡ったのですが 今回の答えも答えをもらって、見れば分かるぐらいの理解しかないのです。 良い学習サイトなどがあれば教えてくれませんか?それともオライリーの本を買うべき?
470 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:45:58 ] >>469 俺はこのスレでROMって勉強してる
471 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 16:47:49 ] とりあえずソフバンあたりで出してる入門書でもいいから 一冊読んだ方がその後が楽になる
472 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 17:29:37 ] >>468 が理解できるのなら、正規表現の基本はできてる気がする。 (カッコのエスケープ、最短マッチ、後方参照あたり) もしプログラミングの経験がなければ、そっちを補ったほうがいいと思う。 正規表現も一緒に学べる『初めてのPerl』『たのしいRuby』あたりお勧め。 リネーマーも自分で作れるよ。
473 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 17:49:46 ] おお、このスレの人は優しい人ばかりですね。 プログラムはPHPぐらいで、しかも正規表現がどうしても必要な場面に 遭遇した事がありません。 これからこのスレをROMったり、挙げてもらった本も入門書のようですので 探して見て勉強してみようと思います。 ありがとうございます。
474 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:49:00 ] ■質問 2ch のレスの >>*** を、テキストエディタを用いて #aa(){{{>>***}}} に置換したいのですが、方法はありますでしょうか?
475 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 10:56:30 ] >>*** のうち、どれが固定でどれが可変なのか区別がつかないと答えられない。 もし全部固定なら、そのままエディタの置換機能を使えば済む。 >>5 を見て、対象データの例と希望する結果を書いてくれ。
476 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 12:56:55 ] >>475 ありがとうございます。わかりにくい表現で申し訳ありません。 ↓が対象データの例と希望する結果です。 ●対象データ >>123 >>456 ●希望する結果 #aa(){{{>>123 }}} #aa(){{{>>456 }}}
477 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:01:41 ] >>476 検索 >>(\d+) 置換 #aa\(\)\{\{\{>>$1\}\}\}
478 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:18:38 ] 置換後の文字列が↓のようになってしまいました。 $1 のところを \d+ や (\d+)、$\d+、$(\d+) に変えて色々やってみましたが ダメでした。置換には EmEditor Pro 7.02 を使っていますが、 何かやり方が誤っているでしょうか? #aa(){{{>>$1}}} #aa(){{{>>$1}}}
479 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:37:14 ] それはソフトの使い方を読むか、サポートに聞け
480 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:31:04 ] >>478 後方参照を $1 ではなく \1 で行う 置換 #aa\(\)\{\{\{>>\1\}\}\}
481 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:49:18 ] >>480 お返事遅れました。 すっげwマジで出来たw 正規表現って本当にすごいですね。 自分は \t や \n 等、基本的なものしかわからなかったのですが、 今回の質問が非常に勉強になりました。 次に疑問が湧いた時には、正規表現でできないことはないという姿勢で 解決に望もうと思います。 ありがとうございました。
482 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:49:51 ] >>480 その括弧のエスケープはなんかいみあるの?
483 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:55:12 ] ■追記 ちなみに、今回の置換の目的なのですが、 atwiki という wiki のページで > のような特殊文字を書くと、 適切に表示がされない不具合(?)があるので、 アスキーアート表示用のメソッド #aa(){引数} を用いて、> を囲みたいなと思ったのが目的でした。 初めは手動でやっていたのですが、あまりにも数が多いので 置換化できないかな、と思った次第です。 長文失礼いたしました。
484 名前:480 mailto:sage [2008/11/29(土) 15:01:52 ] 置換文字列なので無いw 置換 #aa(){{{>>\1}}} こうだね。 吊ってくる
485 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:21:23 ] >>482 ,484 小かっこ () って、正規表現モードでも \ をつける必要ないんですか。 勉強になりました
486 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:29:35 ] >>485 置換文字列は正規表現じゃないというだけ。 正規表現で書かなきゃいけないところで()そのものを書くには エスケープする必要がある。
487 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:46:28 ] ●正規表現の使用環境 .NET FrameworkのRegexクラス。 ですが、Perlなどの正規表現でもかまいません。 ●検索か置換か? 検索です ●説明 エスケープ記号(\)がついていない括弧で囲まれた文字列の検索が目的です。 [^\\]\((?<content>[^\(]+[^\\])\)という正規表現で試したところ、 入力文字列"a(b)"で正しくマッチし"a\(b)"や"\(b)"で正しくマッチしないのですが、 "(b)"では本来マッチしてほしいのにできなくなります。 ●対象データ エスケープ文字がついてないカッコで囲まれた文字列 ●希望する結果 マッチ: "a(b)", "(b)" 非マッチ: "\(b)", "a\(b\)", "a(b\)"
488 名前:487 mailto:sage [2008/11/30(日) 14:12:51 ] 申し訳ありません。(^\(|[^\\]\()(?<content>[^\(]*[^\\])\) で解決しました。
489 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:16:29 ] /(?<!\\)\((?<content>.*)?(?<!\\)\)/
490 名前:デフォルトの名無しさん [2008/12/03(水) 17:36:22 ] aaa777 あああああ aaa778ああああ aaa7 aaa7あああ aaa7aaa8 aaa7 aaa8 目的はaaa7をbbb7に置き換えたい。 しかしマッチ方法で苦しんでいます お助けを・・ /aaa7/ これでは全部置き換わる /aaa7[^\d]/これでは 下の3つが余計な部分含めてマッチしてしまう。。 下から4つ、aaa7のみマッチさせる方法はあるでしょうか。 www.rider-n.sakura.ne.jp/regexp/regexp.php ここで簡単に調べられるのですが宜しくお願いします。 Perl互換の正規表現にチェックをいれていただけるといい感じです。
491 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:46:49 ] >>490 /aaa7(?=[^\d])/ 次からは>>5 でお願い。
492 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:48:08 ] aaa7(?=[^\d]|\Z) そのチェッカーとやらの使い方がよくわからんので試してないが。 (?=ほげ) で先読みが、\Z で改行または文字列末にマッチ、ができることを 前提としている。 何を使っているのかよくわからないが(PHPのPerl互換モード?) 先読みと改行と文字列末の扱いを確認してみること。
493 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 17:50:47 ] よく考えたら /aaa7(?!\d)/ でよかった。
494 名前:490 mailto:sage [2008/12/03(水) 18:28:57 ] >>491 もうしわけないです次から気をつけます。 >>491-493 ふむふむ 先読みという事ができるのですね 結果うまくいきました!ありがとうございました。 先読みと改行と文字列末 これを詳しく勉強してみます。
495 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 18:31:18 ] よくそれだけで答えられるな こう読んだけど違うのかな s/aaa(?=7)/bbb/ >>494 が来てたのでもういいみたいだけど
496 名前:492 mailto:sage [2008/12/03(水) 18:47:11 ] [^\d] は \D でよかったな。 >>495 aaa777 にもそれだとひっかかるよね? それにはひっかけたくないらしかったから。
497 名前: mailto: [2008/12/05(金) 00:09:56 ] ()() [][] {}{}
498 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 21:09:48 ] ふらっとC#,C♯,C#(初心者用) Part34 ttp://pc11.2ch.net/test/read.cgi/tech/1227521785/607 から来ました C#でRegexを使って正規表現を利用しています if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx", @"\s+((\w+\.?)+)$").Success) { Console.WriteLine("True!"); } else { Console.WriteLine("False!"); } Console.WriteLine("カンマあり"); if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx,", @"\s+((\w+\.?)+)$").Success) { Console.WriteLine("True!"); } else { Console.WriteLine("False!"); } マッチする場合は後で ((\w+\.?)+)$ の部分について処理をして、マッチしない場合はそのまま次にいくようにしたいのですが このパターン文字列だと上記のような文字列でカンマが末尾にある場合はfalseが返ってくるまで異常に時間がかかってしまいます 最終的に ((\w+\.?)+)$ 出マッチする場合とと同じ文字列が得られる、末尾にカンマが合っても処理が遅くならないパターンがあれば教えてください
499 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:50:00 ] >>498 (\w+)+ みたいな感じになるから遅いんだろうねえ。 \s+\w+(\.\w+)*$ でどうか。
500 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 22:50:51 ] キャプチャするから \s+(\w+(\.\w+)*)$ こうか。
501 名前:498 mailto:sage [2008/12/06(土) 23:56:46 ] >>499 ,500 ありがとうございます、見違えるように早くなりました (\w+)*は良くても(\w+)+は遅くなるんですね
502 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 03:52:21 ] >>501 > (\w+)*は良くても(\w+)+は遅くなるんですね んー、そういうことではないぞ。 \.? は有っても無くてもいいけど、(\.\w+)* の \. は必要でしょ。 (\.?\w+)* にしたらやっぱり遅くなるはず。 (\w+\.?)+ は「.xxxxxx」だけにも何通りもマッチの仕方があるけど、 (\.\w+)*は1通りしかマッチできない。この違いだよ。
503 名前:498 mailto:sage [2008/12/07(日) 10:07:49 ] >>502 ? と +(もしくは*) の組み合わせが最悪だったわけですか 今度から注意します
504 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 13:53:02 ] >>503 なんかまだ誤解してるっぽいな。 *)* みたいに、カッコの内側の最後に繰り返し指定(*やら+やら)があって、 その外側すぐにも繰り返しがあるのが問題(になることが多い)。 498が最初に書いたようなマッチしないデータを食わせたときに、 バックトラック回数がとんでもなくでかくなって遅くなる(可能性がある)。
505 名前:498 mailto:sage [2008/12/07(日) 15:05:16 ] >>504 理解が遅くてすみません、ようやく分かりました 丁寧にありがとうございました
506 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 20:39:26 ] 正規表現が手に入れた強力すぎる「構文理解(マッチ)能力」って、 外国語の翻訳に使えそうな気がするんだけど、その観点での研究って進んでないの?
507 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:38:53 ] そりゃ無理でしょ。 yaccやbisonで実用になる翻訳ソフトが作れるって話は聞かないから。
508 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:53:34 ] >>506 正則言語はそんなに広いクラスじゃないぞ
509 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 21:56:51 ] >>506 一般の自然言語と正規言語では言語のクラスとして天と地ほどの差があるよ。 たとえば、多くの自然言語は無限回のネストを許容するが、これは正規文法で表せない。
510 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 08:03:55 ] お前らちゃんと日本語話せよ何言ってるか分かんねぇよ
511 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:28:01 ] お前が勉強不足なだけだ。
512 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:45:24 ] なんて面白みの無い、むしろマイナスなレスなんだ
513 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 18:38:31 ] ●正規表現の使用環境 PHP4.4以降 ●検索か置換か? 検索後、個々に置換 ●説明 ユーザーが入力したhtmlデータ内に 特定の文字で囲まれたものを変換したい。 %test%や%nullpo%など。 ●対象データ フォームで送信されたhtmlデータ <html> <head> </head> <body> %adv% あいうえおかきくけこ<br> %adv% </bnody> </html> ●希望する結果 %adv%を発見した位置を返し、それを指定された文字列で置換する。 %adv%は全て同じではなく、別の文字をそれぞれ割り当てたい。 よろしくお願いします。