1 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:36:04 ] 正規表現(Regular Expression)スレです。 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 【 前スレ 】 正規表現 Part5 pc12.2ch.net/test/read.cgi/tech/1212498448/
643 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:40:54 ] >>642 そういうのはperlのスレで聞けよ。 $quoted_ptn = quotometa($ptn); $str =~ /$quoted_ptn/ または $str =~ /\Q$ptn\E/
644 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:42:56 ] ごめんtypoしてるわ。 quotemetaが正解
645 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:51:49 ] >>643 いけました。 どうもすいませんでした。 そして、ありがとうございました。
646 名前:427 [2009/12/03(木) 21:59:36 ] 前方一致(前方参照)について教えてください。 ●正規表現の使用環境 秀丸7.11 HMJRE.DLL1.92 ●検索か置換か? 検索 ●説明 改行(空行)に挟まれたaだけを検索したい ●対象データ a a a ●希望する結果 a ←これだけマッチしてほしい a a
647 名前:デフォルトの名無しさん [2009/12/03(木) 22:00:06 ] 以下を試しましたがダメでした。 (?<=\n\n)a(?=\n\n) (?<=^$)a(?=\n\n) バラして試したところ、どうも後方一致で改行は認識してくれるみたいですが、前方一致では改行はダメのようです。 (?<=\n\n)a ←ダメ (?<=\n)a ←ダメ a(?=\n\n) ←OK そこで知りたいのは、 前方一致で改行を使えないのは仕様でそうなっているからでしょうか?そうした記載を見つけることが出来ませんでした。 また改行(空行)に挟まれた文字を検索する方法がありましたらぜひお教えください。
648 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:22:43 ] >>647 前方一致って look-behind のこと指して言ってんの? それはともかく、秀丸は改行絡みの扱いが弱いから制限事項でない?
649 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:33:51 ] >>646 マッチして欲しいaが空行に挟まれてないじゃん
650 名前:デフォルトの名無しさん [2009/12/03(木) 23:42:48 ] 秀丸v8β28なら (?#fulllinematch)\n(a)\n\n(?\1) でできるみたい 前方一致は秀丸で使われている独自用語。一般用語では648のとおり。
651 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 23:50:50 ] "(a b)(c d e)" こういう文字列を (a b)と(c d e)に分割する事って出来ませんか? 出来ればrubyでお願いします
652 名前:650 [2009/12/03(木) 23:52:40 ] おっと間違えた。 (?#fulllinematch)\n\n(a)\n\n(?\1) だ
653 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 00:46:20 ] r = /(\(+) ([^\(]+) (\)+) /x "(a b)(c d e)" .scan(r).map do |m| puts m.to_s end
654 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 00:51:04 ] ありがとうございます 追加で悪いんですが・・・ "(a b)(c (d e))" もし、こういうネスト構文になった場合 正規表現での分割は無理でしょうか? (a b) (c (d e))
655 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 02:39:38 ] >>654 全ての場合に対応するのは無理
656 名前:646 [2009/12/04(金) 07:03:25 ] >>650 ありがとうございました。 なんか最新βからfulllinematchなるものが使えるようになったみたいですね。 実にタイムリーでした。 おまけに (?<=\n\n)a を実行すると「前方一致では改行文字は使えません」なメッセージも表示するようになっていました。 で、「前方一致」って秀丸独自だったんですね。以後注意します。
657 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:12:15 ] >>653 を少し改良してみて p "(a b)(c d e)test".scan(/(\([^\(]*\))/) こうなったんですが 何故^\(を[]で囲わなきゃいけないんでしょうか? ↓のようにかいても意味は同じだと思うんですが動かないんです。かき方が違うんでしょうか? p "(a b)(c d e)test".scan(/(\(^\(*\))/) p "(a b)(c d e)test".scan(/(\(.*\))/)
658 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:24:08 ] 正規表現では、[]で囲まれると、他の部分と意味が変わって、 たとえば [^\(] の場合、( 以外の任意の一文字、という意味になる。
659 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:34:02 ] >>658 ^この否定は[]の中でしか使えないんですかね (a b)と(c d e)に分割するには/(\([^\(]*\))/これが最小コードとなるんでしょうか? あと>>653 さんのかいた//x のxの意味もよくわからず消してしまったんですが、xをつけると何が変わるんでしょう?
660 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:00:25 ] >>658 []の中の(はエスケープいらんだろう。 >>659 オマエはマニュアル読むって頭を持ってないのか?
661 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:20:50 ] >>660 だって、早く簡単にわかるならそのほうがいいじゃないですか。
662 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:11:59 ] うわぁぁぁ
663 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:52:52 ] >>660 //xについての記述はぐぐりにくいので見つけられなかったです
664 名前:デフォルトの名無しさん mailto:>>661 [2009/12/05(土) 00:03:30 ] | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | | | /  ̄ ̄ ̄ ̄ / / ぶち殺すぞ / / / / / / ____ / / / / /
665 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:05:30 ] 確かに調べるのめんどくさいんですが、 2chはいつから喰わず嫌いをはじめたのか、質問したい 次の方どうぞ
666 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 11:36:21 ] 釣りはいいから。獣の数字げっと
667 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 12:02:56 ] 鬼車でひいひいいわせてやるよ
668 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 15:49:19 ] 諸君、進んでおるかね?
669 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:46:12 ] ●正規表現の使用環境 otbedit(www.hi-ho.ne.jp/a_ogawa/otbedit/index.htm )というエディタです。 (emEditorでは行をまたいだ置換がうまくいかずotbeditに変えました。使えればソフトにはこだわりません) Perl互換の拡張正規表現が使えるとのことですが、詳しい説明が書いておらずわかりませんでした。 ●検索か置換か? 置換 ●説明 特定の文字列の間にある空でない文字列の最後に任意の文字列を加えること (例では@Bと@Aの間にある空でない文字列の最後にaを付け加えたい。できればそれから@Aと@Bは除外したい) 【@B(.|[\r\n])*?@A】で全体から特定の範囲を指定した後で 【[^\n]+$】→【$&a】の置換の繰り返しで可能ではありましたが、数が多いのでできれば一括で置換したいです。 ●対象データ @A あいうえお @B かき っくけこ さしす @A せそたち つてと @B なにぬね のは @A ひふへほ
670 名前:デフォルトの名無しさん [2009/12/15(火) 18:49:00 ] ●希望する結果 @A あいうえお @Ba かきa っくけこa さしすa @Aa せそたち つてと @Ba なにぬねa のはa @Aa ひふへほ ↑できれば@Aや@Bにaをつけたくはありません
671 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 04:39:29 ] ゼロ幅アサーション
672 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:54:38 ] 誰かCで正規表現できるクラス作れよ BOOST使いづらすぎる
673 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 02:34:55 ] CじゃなくてC++です
674 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 04:07:23 ] Boost Regex++じゃ駄目なのか
675 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 14:59:11 ] Boost使いづらいです・・・
676 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:27:52 ] xpressiveもだめ?
677 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 17:04:49 ] 今出先なので、帰ったら見てみます
678 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 18:28:13 ] 鬼車ってどうなんでしょうか?
679 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 19:27:41 ] どうって?
680 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:41:42 ] 性能?
681 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:06:52 ] 鬼車って確か検索機能しかないよね(置換機能が無い) 置換を自力で実装するの面倒なんで代わりにbregonig.dllとか使うんだけど 文字コードsjisしか使えなくて勿体無いあああってなる
682 名前:デフォルトの名無しさん [2009/12/25(金) 19:56:08 ] ●正規表現の使用環境 perl5.8.7 CentOS 5.3 文字コードはEUCです。 ●検索か置換か? 置換 ●説明 全銀テレ為替文字対応のため、数字、大文字英字、半角カナ・濁点、一部半角記号記号のみの文字列に 変換したいのです。 可能文字はこちら ttp://www.kyodocms.jp/qanda/qa18.htm これら以外の文字を半角スペースに置き換えたいのです。 ●対象データ 任意の文字列です。 1.ひらがな→カタカナ変換 2.全角→半角変換 3.英小文字→英大文字変換 4.ァィゥェォッャュョをアイウエオツヤユヨに変換 ここまで出来てて、入力可能文字以外をスペースに置き換えたいんですが、上手くいきません。 どうすればいいでしょうか?
683 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:29:25 ] [^0-9A-Zアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン゛°\\,\.「」\(\)\-\/] を に置換 あってるかどうかは試してないけどこういうこと?
684 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:49:43 ] >>683 レスどうもです。そのとおりです。 >>682 の条件を変数$regExpに代入し、 $result = 'パ-カ-ヲ買ツタ01234567'; $result =~ s/$regExp/ /g; とすると、漢字だった部分が文字化けし、「パ-カ-ヲ ・糟・1234567」となってしまいます。 結果は「パ-カ-ヲ ツタ1234567」にしたいのです。
685 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:05:51 ] 未定義領域含んでるんじゃね? 文字の正規表現 www.din.or.jp/~ohzaki/perl.htm#Character
686 名前:デフォルトの名無しさん [2009/12/26(土) 00:26:46 ] 質問があります。 <div id=・・・>←1 <div id=・・・> </div>←2 <div id=・・・> </div>←3 </div>←4 抜き出したいのは1から4全体なんですけど "<div id=・・・(.+?)</div> で非欲張り系で抜き出すと1から2までヒットします。 1から4全体を抜き出す方法ていうのはないのでしょうか? XML形式ならいけるぽいのですが・・・ 無理なのでしょうか?
687 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 01:52:00 ] 対応するタグという意味なら田中スペシャルが使えればできる。
688 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 08:16:39 ] ていうか素直にXMLパーサ使え
689 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:19:49 ] HTMLの処理には正規表現ではなくHTMLパーザを、XMLの処理にはXMLパーザを。 テンプレに入れてもいいレベルのFAQ。
690 名前:デフォルトの名無しさん [2009/12/27(日) 02:55:21 ] わかりました。パーサを調べてみます
691 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:29:47 ] 文字列を分割するとき、特定の文字で囲われているものは除外するっていう方法ありますか? phpなんですけど preg_splitで例えば A,B,C,'D,E',F を [0]=A [1]=B [2]=C [3]=D,E [4]=F 上記のように分割できますか?
692 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:34:35 ] 普通にCSVのモジュール使えばいいのでは
693 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 19:36:26 ] >>691 詳説 正規表現 にCSV処理のサンプルあるよ。オヌヌメ
694 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 15:29:52 ] ●正規表現の使用環境 Java1.5(Firefox 3.0.16) ●検索か置換か? 検索 ●説明 \.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jpという文字列を検索したいです。 ※検索対象の文字列自体が正規表現のようになっています。 ●対象データ \.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp ●希望する結果 \.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ※完全一致 自分なりに\を付けたりして試してみたのですが出来ませんでした。 以上、どうかよろしくお願いします。
695 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:02:17 ] 文字列定数内の \ 自体を \\ とするエスケープまで含めて "\\\\\\.nas\\(3\\|5\\)\\\\d\\+\\\\\\.\\[a\\-z\\\\\\-\\]\\+\\\\\\.nttpc\\.ne\\.jp" となる
696 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 10:01:19 ] >>695 694です。 どうもありがとうございました。 すごく長い表現になっちゃうんですね。(汗
697 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 15:49:42 ] こんにちは。 度々すみませんが、よろしくお願いします。 ●正規表現の使用環境 Java1.5(Firefox 3.0.16) ●検索か置換か? 検索 ●説明 #ipbf\d+souka.saitama.ocn.ne.jp という文字列を検索したいです。 //マッチする var body = document.body.innerHTML; var temp1; temp1 = new RegExp(/#ipbf\\d\+souka.saitama.ocn.ne.jp/); alert(temp1.test(body)); //マッチしない var body = document.body.innerHTML; var word = new Array(); var temp2; word.push('#ipbf\\d\+souka.saitama.ocn.ne.jp'); for (var i = 0; i < (word.length); i++) { temp2 = new RegExp(word[i]); alert(temp2.test(body)); } ●対象データ #ipbf\d+souka.saitama.ocn.ne.jp ●希望する結果(※完全一致) #ipbf\d+souka.saitama.ocn.ne.jp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 「//マッチしない」方の配列内容を変えずに(\を追加せずに)一致させたいです。 以上どうか、よろしくお願いします。
698 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 16:25:29 ] Pattern.quote 使えばできるんでない?
699 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:01:43 ] >>697 word.push(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);
700 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:38:39 ] >Java1.5(Firefox 3.0.16) JavaじゃなくてJavaScriptでしょ?それなら>>695 は正規表現リテラルでこう書ける /\\\.nas\(3\|5\)\\d\+\\\.\[a\-z\\\-\]\+\\\.nttpc\.ne\.jp/
701 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 16:48:00 ] >>698 >>699 >>700 返事が遅くなりすみません。 レスありがとうございます。 体調が悪くまだよく試していないのですが、まずはお礼だけで失礼します。
702 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:07:34 ] JavaとJavaScriptが区別できない人っていまだにいるのか…
703 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:16:48 ] VBとVBAの違いもな。 説明するの大変なんだよな・・・。
704 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:32:15 ] VBとVBAの違いなんて知らない奴たくさんいるだろ VB触ってるのは底辺だけなんだから
705 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:55:38 ] ゲーム機は全て「ファミコン」だ。
706 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 01:36:20 ] ファミコンって何だ? ピコピコのことか?
707 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:05:34 ] ピコピコはゲームウォッチ系じゃねーの? 知人が20万円ほど出してPC-98を買ったら 姉に「たっかいファミコンやなぁ」と言われたらしい。
708 名前:デフォルトの名無しさん [2010/01/05(火) 12:45:41 ] ●正規表現の使用環境 Java1.5 ●検索か置換か? 検索 ●説明 123456700 とか12345678-00など 7桁から10桁の数字にあと2桁の数字がハイフンもしくは連続して付属する数列の検索。 数列の直前にCodeまたはInvoiceがついてたら除外する。 Invoice 12345678-00 はマッチしないけどaccess# 12345678-00 はマッチする。 "On Invoice 123446789, your order was placed. However, please be sure to note that your account number 789456123 is suspended until further notice." 最初の番号Invoice 123446789は無視するけどaccount number 789456123はマッチするようにしたい。 ●対象データ Invoice 123446789 word 454545454 454545454545 Code: 4085432259 passcode 6789012 06 number 8901234 08 word 454545454 word ●希望する結果 マッチしない Invoice 123446789 Code: 4085432259 passcode 6789012 06 Code 7890123-07 ^(?!(Code|Invoice).)([^=\/%(.]\b\d{7,10}((\d?\d?)|(-\d\d))?\b) 自分でここまでやったけどうまく動かないです。 よろしくお願いいたします。
709 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:09:16 ] javaならプログラム書けるんだからInvoice,Codeのことはとりあえず 忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode, Invoiceがないことを確認する方がたぶん楽だと思うよ。
710 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:09:29 ] javaならプログラム書けるんだからInvoice,Codeのことはとりあえず 忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode, Invoiceがないことを確認する方がたぶん楽だと思うよ。
711 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:10:13 ] すまん2つ出た
712 名前:デフォルトの名無しさん [2010/01/05(火) 14:16:10 ] ありがとうございます。実際にはJAVAで作成しているわけではなく、アプリケーションがJAVAとおなじ正規表現を使用している環境なので、プログラムを書くことはできないんです。それでここでアドバイスがいただければと思いまして、
713 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 14:30:07 ] look-ahead(?!...)じゃなくてlook-behind(?<!...)を使うとこだね。 そしてlook-behindはたいていある決まった長さのの文字列に マッチするパターンがしか使えないので、 (?<!Invoice: )(?<!Invoice )(?<!Code: )(?<!Code ) のように並べて使うことになるだろう。 必要な仕様がきちんと書かれてないのでこれだというのは 示せないけどがんばれ。
714 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 14:51:49 ] ●正規表現の使用環境 VB.NET ●検索か置換か? 検索 ●説明 タブを含む何かの文字列の複数行を表す方法を教えて ●対象データ AAAA TAB TAB hogehoge改行 あああああ TABT ABT AB hogehoge改行 TAB TAB hogehoge改行 ZZZZ ●希望する結果 あああああ Regex("AAAA\n([\t.]+?\n)+(?<1>.+?\n)([\t.]+?\n)+ZZZZ",MultiLine) 上のように書いてみましたがだめでした。 AAAA改行とZZZZの間の文字列をターゲットにしつつ その中にタブか何かの文字の組み合わせの文字列が1つ以上あって、行末に改行がある という行がいくつかある。 ということを書いたつもりなのですが間違っているところを教えて頂きたいです。
715 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:06:04 ] [\t.]だとタブまたは任意の文字なので結局[\t.]+?は.+?と書いたのと同じ。 また、〜+?とは普通書かないね。〜*と同じなので。 \tが少なくとも一つ含まれた行にマッチさせたいなら、 .*\t.*\n
716 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:09:31 ] いや+?は最短マッチだろ。
717 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:12:27 ] Multilineなら\nは.に含まれないので、.+?\nと書いても結局.*\nと 同じになるっていいたいんじゃねーの?
718 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:48:20 ] それをいうなら.+じゃないか
719 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 16:31:59 ] 前にも .+? と .* が等価だと思ってる人がいたような。 \d? とかの ? と同じものに見えてるのかな。
720 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 22:00:58 ] >>715 [\t.] ってブラケットの中にはいってんのなら'.'は単なるピリオドでしょ。
721 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 22:09:28 ] Javascriptを勉強中です。といっても、ブックマークレット程度しかやってませんが。 正規表現を練っていたときに、もうかなり以前のブラウザから最短一致(ものぐさ/non-greedy/非貪欲)が 使えるようになっていたことを知り、いま必要というわけではないのですが、詳しく調べてました。 {n,m}? {n,}? *? +? ?? ←これらについては自習して使い方を理解したのですが、{n}? が解りません。 どう考えても {n} と {n}? は同じ結果になるように思えるのです。 正規表現のリファレンスや正規表現を解説しているサイトは数多く見ましたが、量指定子の直後に?を付けた {n}? を紹介はしていても、その使い方を例示したものを見つけることが出来ませんでした。 どなたか解説していただければ幸いです。よろしくお願いします。 記号関係はGoogleでも検索しづらいので、なかなか見つかりません。Googleの弱点ですね。
722 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 22:36:48 ] googleに頼り切ってるヤツの弱点に見えるけどなぁ ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html >a{n}? = ちょうどn回の繰り返しにマッチします。ちょうどn回なので、a{n}と等価であり、一貫性のためだけに存在します。 要するに/x{1}/の意味を問うているようなもん
723 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 12:53:43 ] >>722 的確な回答ありがとうございます。 >googleに頼り切ってるヤツの弱点に見えるけどなぁ 検索ばかりしてるんじゃなく良書を得てそれで勉強せよ、またはGoogleに頼り切ってると 目が節穴になるぞ、というお叱りと理解いたしました。 ☆perlretut - Perl の正規表現のチュートリアル ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html これは>>2 の一番最初、「正規表現メモ」のページにある一番最初のリンクですね。 答えへの近道はGoogleでなく、このスレにあったようで…目が節穴でした。 このチュートリアルはとても解説が丁寧で、まさしく良書だと思います。これで勉強します。 結論としては /x{n}/ と /x{n}?/ は同じ結果なので、通常 {n}? は使用されない、ですね。 やはりPerlだと細かい情報もしっかりあってスゴイです。 これからは正規表現で悩んだらこのスレとPerlの周辺を当たってみようと思います。
724 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 15:57:50 ] >>723 それ、Perlのマニュアルなんだよ。UNIX系のシステムだったら man perlretut を実行すると表示されるよ。 ウェブを見るより先にマニュアルを読めってことで。
725 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 16:31:29 ] .NET のマニュアルにも {n}? は {n} と等価って書いてあるな。 なんか訳が微妙におかしいけど。 msdn.microsoft.com/ja-jp/library/3206d374 (VS.80).aspx
726 名前:723 mailto:sage [2010/01/12(火) 22:05:22 ] >>724 UNIX系とは縁がありませんが、perlre/perlretutはWeb上にあるので、それをmanの代わりにします。 Javascriptで使える表現かどうかは、以下を見てチェック。 ☆RegExp - Core JavaScript 1.5 Reference - Mozilla Developer Center ttps://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp 出来るだけ大本の公式情報を参照すべし、ですね。 >>725 情報ありがとうございます。間違ってはいませんが、確かに変ですねぇ。 perlretut、面白いですね−。塩基配列のストップコドンのとことか。 自習してみて、チュートリアルと同じ結果になるのを確認したのはいいのですが… Javascript:var R=/(\w\w\w)*?TGA/g, S='ATCGTTGAATGCAAATGACATGAC', A = [], I = 0; while(R.test(S)) {A[I] = RegExp.lastMatch + ' (' + RegExp.lastParen + ') Pos=' + R.lastIndex; ++I;} alert(A.join('\n\n')); なぜずれるのか、理解できず…。その後バックトラックの動作を知り、単に「必ず3文字ずつ進む」と 思い込んでただけだと気付きました。。。マッチにトライして失敗したらそこで終わりではなく、 開始位置を1文字進めるんですね。筆者が仕掛けた罠に見事にハマりました。。。 というか、こういう処理は素直に3文字ずつ取り出して判定すべきですよね。 なお、Javascriptには\Gなんてありませんでした。残念!
727 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 21:03:05 ] >726 man じゃなくても perldoc perlretut でいけるよ。
728 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 16:56:04 ] >>725 MSDNライブラリは機械翻訳だからしかたないべ