違いは何ですか:
(.+?)
そして
(.*?)
PHPpreg_match正規表現で使用する場合はどうなりますか?
違いは何ですか:
(.+?)
そして
(.*?)
PHPpreg_match正規表現で使用する場合はどうなりますか?
回答:
それらは数量詞と呼ばれます。
* 上記の式が0個以上
+ 上記の式の1つ以上
デフォルトでは、量指定子は貪欲です。つまり、可能な限り多くの文字に一致します。
?数量詞は、この数量詞は「ungreedy」にするために動作を変更した後、それができるだけ一致することを意味します。
貪欲/貪欲でない例
たとえば、文字列「abab」
a.*b 「abab」と一致します(preg_match_allは1つの一致、「abab」を返します)
whilea.*?bは、最初の「ab」のみに一致します(preg_match_allは2つの一致、「ab」を返します)
正規表現はオンラインでテストできます。たとえば、Regexrでテストできます。ここで貪欲な例を参照してください。
(.+?)と(.*?)されている正規表現の様々な位置で異なる動作をしa(.+?)、(.+?)b、a(.+?)b、a(.*?)、(.*?)b、a(.*?)b。
.*可能な限り一致します。できるだけ早く停止したい場合は、貪欲にしないでください.*?
Aは、前のパターンの1つ以上のインスタンスに+一致します。Aは、前のパターンの0個以上のインスタンスに一致します。*
したがって、基本的に、+パターンのインスタンスが少なくとも1つ存在する必要があります。使用する*場合、インスタンスがない場合でも一致します。
+ 少なくとも1つの文字に一致します
* 任意の数(0を含む)の文字に一致します
?怠惰な発現を示すので、できるだけ少ない文字と一致します。
正規表現では、{i,f}「間の意味iにfマッチします」。次の例を見てみましょう。
{3,7} 3〜7試合を意味します {,10} 下限なしで最大10試合を意味します(つまり、下限は0です){3,} 上限のない少なくとも3つの一致を意味します(つまり、上限は無限です){,} 一致数の上限または下限がないことを意味します(つまり、下限は0で、上限は無限です)。{5} 正確に4を意味します ほとんどの優れた言語には略語が含まれているため、正規表現にも略語が含まれています。
+ の省略形です {1,}* の省略形です {,}? の省略形です {,1}つまり+、少なくとも1つの一致が必要ですが、*任意の数の一致を受け入れるか、まったく一致しないことを意味します。?せず、1つ以下の一致または0受け入れます。
クレジット:Codecademy.com