私がよく知っているすべての言語の正規表現エンジンでは、.*
表記は 0 個以上の文字の一致を示します。次の Javascript コードを検討してください。
var s = "baaabcccb";
var pattern = new RegExp("b.*b");
var match = pattern.exec(s);
if (match) alert(match);
これは出力しますbaaabcccb
Python でも同じことが起こります。
>>> import re
>>> s = "baaabcccb"
>>> m = re.search("b.*b", s)
>>> m.group(0)
'baaabcccb'
"baaabcccb"
これらの言語が単純に一致するのではなく、両方が一致する理由は何"baaab"
ですか? 私がパターンを読む方法は、「で始まり、他の任意の数の文字を含み、で終わるb.*b
部分文字列を見つける」です。と の両方がこの要件を満たしていますが、Javascript と Python の両方が後者に一致します。その部分文字列が要件を満たし、最初に表示されるという理由だけで、一致すると予想していました。b
b
baaab
baaabcccb
baaab
では、なぜbaaabcccb
この場合、パターンが一致するのでしょうか? baaab
そして、代わりに一致するように、この動作を (いずれかの言語で) 変更する方法はありますか?