「repeat-exactly-m-times」数量詞の貪欲なバージョンと怠惰なバージョンの違いが見られる例を挙げてください。質問はこことここ
から生じました。
違いがない場合、数量詞には何が存在しますか?{m}?
3 に答える
それぞれが正確にm回を指定しているので、{m}
との間に実際の違いはないと思います。ただし、と(および、私たちがそれに取り組んでいる間){m}?
の間には違いがあります。特定のケースでは必要ない場合でも、一般に数量詞に適切であり、必要です。{m,}
{m,}?
{m,}+
コメントで述べたように、鬼車の正規表現エンジンは、例外として、それを異なる方法で処理します{m}?
。つまり、貪欲ではない正確なm(貪欲な正確なmと同じ)ではなく、0または-mです。私が試した他のすべてのエンジンは、他のポスターが言うように、違いはありません。
貪欲でない正確なmが存在する理由:存在しなかった場合、それは例外です。例外は覚えにくく、実装も難しくなります。これは余分な作業です。この場合、セマンティクスが等しいため、誰も傷つけません。
私は鬼車が大好きで、不要な部分をもっと使いやすく効率的なものに変えたいと思っていたかもしれませんが、これはバグが発生するのを待っているようです。幸いなことに、誰も正気ではない正確なmを書きません...
完全一致には違いはありません{m}
。
ただし、{m,}
貪欲な修飾子ができるだけ多くの文字に一致するのに対し、怠惰な修飾子はできるだけ少なく一致することで違いが生じます。
与えられた文字列"Baaaaaaaaaaaa"
正規表現(B[a]{2,}?)
は一致します"Baa"
正規表現(B[a]{2,})
は一致します"Baaaaaaaaaaaa"
一方、完全に一致する場合{m}
:
正規表現(B[a]{2}?)
は一致します"Baa"
正規表現(B[a]{2})
も一致します"Baa"