違いは何ですか:
(.+?)
そして
(.*?)
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