貪欲なモード:
数量インジケーターは、特に示されない限り、デフォルトで貪欲モードになります。貪欲なパターンの表現は、できないまで一致し続けます。式マッチングの結果が予想されたものと一致しないことがわかった場合、それはそうである可能性が非常に高いです - 式は最初の数人のキャラクターとしか一致しないと思うが、実際にはそれは貪欲なパターンであるため、それは一致し続けます。
貪欲と非greed、プラス? groedではありません:
var s = '1023000'.match(/(/d+)(0*)/); s ["1023000"、 "1023000"、 ""] var s =' 1023000'.match(/^(/d+)(0*)$/); s ["1023000"、 "1023000"、 " '1023000'.match(/^(/d+?)(0*)$/); s ["10"、 "1"、 "0"]]
Javaの正規表現は、デフォルトで貪欲な貪欲なマッチングパターンを使用します。このタイプの最長の一致(。*)です。最短一致が必要な場合、(。*?)に変更されます。つまり、ほとんど一致パターンです。
原則分析:
それが貪欲なマッチングパターンの場合、正規表現エンジンは文字列の終わりまで一致します。試合がfalseの場合、それは後方になり、一致する結果を返す最後のマッチングポジションを見つけます。かろうじて一致するパターンの場合、正規表現エンジンはパターンの最後のキャラクターと一致し、一歩後退し、一致が偽であることを見つけ、フォールバックで見つかった最新のマッチが真である位置に戻り、結果を返します。
コードを見てください:
例1:
public void test51(){string str = "aaa/" bbb/"ccc/" dd/"eee"; System.out.println(str); str = str.replaceall( "/"(pod)/" "、"@"); System.out.println(str); }出力:
aaa "bb" cc "ddd" eeeaaa@eee
例2:
@test public void test52(){string str = "aaa/" bbb/"ccc/" dd/"eee"; System.out.println(str); str = str.ReplaceAll( "/"(pod?)/" "、"@"); System.out.println(str); }出力:
aaa "bb" cc "ddd" eeeaaa@ccc@eee