正規表現 Part6at TECH
正規表現 Part6 - 暇つぶし2ch715:デフォルトの名無しさん
10/01/05 15:06:04
[\t.]だとタブまたは任意の文字なので結局[\t.]+?は.+?と書いたのと同じ。
また、~+?とは普通書かないね。~*と同じなので。

\tが少なくとも一つ含まれた行にマッチさせたいなら、

.*\t.*\n

716:デフォルトの名無しさん
10/01/05 15:09:31
いや+?は最短マッチだろ。

717:デフォルトの名無しさん
10/01/05 15:12:27
Multilineなら\nは.に含まれないので、.+?\nと書いても結局.*\nと
同じになるっていいたいんじゃねーの?

718:デフォルトの名無しさん
10/01/05 15:48:20
それをいうなら.+じゃないか

719:デフォルトの名無しさん
10/01/05 16:31:59
前にも .+? と .* が等価だと思ってる人がいたような。
\d? とかの ? と同じものに見えてるのかな。

720:デフォルトの名無しさん
10/01/05 22:00:58
>>715
[\t.] ってブラケットの中にはいってんのなら'.'は単なるピリオドでしょ。


721:デフォルトの名無しさん
10/01/10 22:09:28
Javascriptを勉強中です。といっても、ブックマークレット程度しかやってませんが。
正規表現を練っていたときに、もうかなり以前のブラウザから最短一致(ものぐさ/non-greedy/非貪欲)が
使えるようになっていたことを知り、いま必要というわけではないのですが、詳しく調べてました。

{n,m}? {n,}? *? +? ?? ←これらについては自習して使い方を理解したのですが、{n}? が解りません。
どう考えても {n} と {n}? は同じ結果になるように思えるのです。
正規表現のリファレンスや正規表現を解説しているサイトは数多く見ましたが、量指定子の直後に?を付けた
{n}? を紹介はしていても、その使い方を例示したものを見つけることが出来ませんでした。
どなたか解説していただければ幸いです。よろしくお願いします。

  記号関係はGoogleでも検索しづらいので、なかなか見つかりません。Googleの弱点ですね。

722:デフォルトの名無しさん
10/01/10 22:36:48
googleに頼り切ってるヤツの弱点に見えるけどなぁ

URLリンク(www.kt.rim.or.jp)
>a{n}? = ちょうどn回の繰り返しにマッチします。ちょうどn回なので、a{n}と等価であり、一貫性のためだけに存在します。

要するに/x{1}/の意味を問うているようなもん

723:デフォルトの名無しさん
10/01/11 12:53:43
>>722
的確な回答ありがとうございます。

>googleに頼り切ってるヤツの弱点に見えるけどなぁ
検索ばかりしてるんじゃなく良書を得てそれで勉強せよ、またはGoogleに頼り切ってると
目が節穴になるぞ、というお叱りと理解いたしました。

☆perlretut - Perl の正規表現のチュートリアル
URLリンク(www.kt.rim.or.jp)
これは>>2の一番最初、「正規表現メモ」のページにある一番最初のリンクですね。
答えへの近道はGoogleでなく、このスレにあったようで…目が節穴でした。
このチュートリアルはとても解説が丁寧で、まさしく良書だと思います。これで勉強します。

結論としては /x{n}/ と /x{n}?/ は同じ結果なので、通常 {n}? は使用されない、ですね。

やはりPerlだと細かい情報もしっかりあってスゴイです。
これからは正規表現で悩んだらこのスレとPerlの周辺を当たってみようと思います。

724:デフォルトの名無しさん
10/01/11 15:57:50
>>723
それ、Perlのマニュアルなんだよ。UNIX系のシステムだったら
man perlretut を実行すると表示されるよ。

ウェブを見るより先にマニュアルを読めってことで。



725:デフォルトの名無しさん
10/01/11 16:31:29
.NET のマニュアルにも {n}? は {n} と等価って書いてあるな。
なんか訳が微妙におかしいけど。

URLリンク(msdn.microsoft.com)(VS.80).aspx

726:723
10/01/12 22:05:22
>>724
UNIX系とは縁がありませんが、perlre/perlretutはWeb上にあるので、それをmanの代わりにします。
Javascriptで使える表現かどうかは、以下を見てチェック。
☆RegExp - Core JavaScript 1.5 Reference - Mozilla Developer Center
URLリンク(developer.mozilla.org)
出来るだけ大本の公式情報を参照すべし、ですね。

>>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:デフォルトの名無しさん
10/01/13 21:03:05
>726
man じゃなくても perldoc perlretut でいけるよ。

728:デフォルトの名無しさん
10/01/15 16:56:04
>>725
MSDNライブラリは機械翻訳だからしかたないべ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch