2013-01-15 8 views
5

方法次の数量が異なるん - などのシナリオに関して、速さ、と遅延、欲張りと所有量の違いは何ですか?

  • ????+すべて一致0または1回
  • **? and * + `すべて一致0回以上
  • +,+?および++はすべてと一致する。

  • ?*+貪欲です。
  • ??,*?および+?は、不快/怠け者である。
  • ?+,*+および++は、であり、所有者である。

これらの用語の意味を理解できる人はいますか?なぜ、同じ仕事のために各量指定子に3つのバリエーションがあるのですか?

+2

なぜですか?どこかの誰かがそれらを使用しているからですか?あなたは本当に正規表現の文書を読んで、IRBやrubular.comを使って物事を試し、彼らの働き方を見て、あなたが将来学んだことを覚えておく必要があります。プログラム学習の多くは、マイナーな変更の影響を観察する実験であり、人々にそれらのことを説明するよう求めない。 –

+0

http://www.regular-expressions.info/possessive.html – Phrogz

+0

@TimPietzcker私に投票してくれてありがとう。それは私のためには重要ではありませんが、下の投票は「新しい投稿」にロックをかけます。私はそのような投票には少なくとも介入していますが、そのような概念を持つような鋭い概念を持っている人が好きすぎるほどあなたを魅了します。しかし、何人かの「SO」ユーザーは、質問の重要性を知らずに、他の人に「投票しない」ことにもっと興味があることを見ている。私の 'Post'を理解していなければOKです。しかし、回答が投稿され、回答があまりにも多くの知識があるときは、投票した人に投票して戻ってみませんか? – DoLoveSky

答えて

7

文字列に

aaaab 

を取ると、次の正規表現は、それに一致する方法を参照してください。説明

Regex   Submatches 
       group 1 group 2 group3 
(a?)(a*)(ab) a  aa  ab 
(a??)(a*)(ab)   aaa  ab 
(a?+)(a*)(ab) a  aa  ab 
(a*)(a?)(ab) aaa    ab 
(a*?)(a?)(ab)   aaa  ab 
(a*+)(a?)(ab) aaaa    <Match fails!> 
(a+)(a*)(ab) aaa    ab 
(a+?)(a*)(ab) a  aa  ab 
(a++)(a*)(ab) aaaa    <Match fails!> 

  • a?は1 aを一致させようとしますが、それを用意していますそれが必要な場合は何も合わせないマッチ全体が成功する。
  • a??は何も一致しようとしませんが、成功するために必要な場合はaと一致するように準備されています。
  • a?+は、一致するように試みますa。それが可能ならば、でなく、が完全に成功するために必要であれば、何もマッチしないようにバックダウンします。それがaに一致しない場合、それは何も喜んで一致しません。
  • a*はできるだけ多くの数字をaと一致させようとしますが、一致する数字が成功するために必要な場合は何も入力しないようにしても、一致する数字はaです。
  • は何も一致しようとしませんが、マッチ全体が成功するためには絶対に必要な数だけaと一致するように準備されていますが、それ以上は成功しません。
  • a*+は可能な限り多くの番号をaと一致させようとします。それができれば、ではなく、と一致して、全体一致が成功するために必要だった場合は、より少なく一致するようになります。a単一のaでも一致しない場合は、何も喜んで一致しません。
  • a+は可能な限り多くの数字をaと一致させようとしますが、マッチ全体が成功するために必要な場合は、a(ただし少なくとも1つ)と一致するように準備されています。
  • a+?は1つだけaと一致しようとしますが、マッチ全体が成功するためには絶対に必要ですが、それ以上は一致しないように調整されています。
  • a++はできるだけ多くaと一致するようにします。それができれば、ではなく、と一致して、全体一致が成功するために必要だった場合は、より少なく一致するようになります。a 1つでもaと一致しない場合、正規表現は失敗します。
+0

最後に、通常の「1つ以上のもの」、「欲張り/非貪欲」を超えた包括的な説明。プリマ! – BernardK

+0

@tim優秀!あなたは何を説明しただけで輝かしい!それが好きなのは大好き! :)あなたに '+ 1'! – DoLoveSky

+0

@DoLoveSky、投票しないでください。懇願することなく評判を得る方法については、http://stackoverflow.com/faq#reputationを参照してください。 –

関連する問題