この正規表現を考えると:
x[^x]*+x
および照合用のこの入力文字列:
xbbbx
xbbbx
結果は、インデックス 0 から始まりインデックス 5 で終わる一致したテキストです。
しかし、正規表現と文字列の両方で最後の文字x
をZ
に変更するだけで、次の正規表現が得られます。
x[^x]*+Z
そしてこの入力文字列:
xbbbZ
結果は: no match foundです。
1 文字の変更で、このような動作の変更が生じるのはなぜですか?
この正規表現を考えると:
x[^x]*+x
および照合用のこの入力文字列:
xbbbx
xbbbx
結果は、インデックス 0 から始まりインデックス 5 で終わる一致したテキストです。
しかし、正規表現と文字列の両方で最後の文字x
をZ
に変更するだけで、次の正規表現が得られます。
x[^x]*+Z
そしてこの入力文字列:
xbbbZ
結果は: no match foundです。
1 文字の変更で、このような動作の変更が生じるのはなぜですか?
その理由は、シンボルに可能な限り一致する「所有格」量指定子を使用しているためです。
したがって、この場合xbbbZ
、正規表現x[^x]*+
は、行末まですべての非 x 文字と一致し、そこで停止します。input 内の "Z" は既に消費されていますxbbbZ
。
この正規表現 は、「所有」量指定子がに達したときに停止する必要があるため、x[^x]*+x
で機能します。入力の末尾に があるため、所有量指定子が停止します。これにより、正規表現の最後の部分を と一致させることができます。xbbbx
x
x
x
x
Javaチュートリアル ページの最後に、所有量指定子の別の例が表示されます。