" と一致しますが、実際の結果は "
ホームページ >Java >&#&チュートリアル >Java プログラムにおける正規表現の貪欲パターン マッチングの分析例
Greedy モードは最大一致とも呼ばれます。X?, ;abb"、おそらく期待される結果は "a34de1251f0d9fe1e645927f19a896e8" と一致しますが、実際の結果は "a34de1251f0d9fe1e645927f19a896e8aava fd273fcf5bcad3dfdad3c41bd81ad3e5" と一致します。貪欲モードの詳細を見てみましょう。
貪欲モード (Greedy):
特に指定がない限り、数量インジケーターはデフォルトで貪欲モードになります。 Greedy モードの式は、一致するものが見つからなくなるまで一致し続けます。式の一致結果が期待どおりではないことがわかった場合、その理由として最も可能性が高いのは、式が最初の数文字のみに一致すると思っていたが、実際には貪欲なパターンであるため、引き続き一致することです。
貪欲と非貪欲、および非貪欲のための ? :
var s = '1023000'.match(/(\d+)(0*)/); s ["1023000", "1023000", ""] var s = '1023000'.match(/^(\d+)(0*)$/); s ["1023000", "1023000", ""] var s = '1023000'.match(/^(\d+?)(0*)$/); s ["1023000", "1023", "000"] var s = '1023000'.match(/(\d+?)(0*)/); s ["10", "1", "0"]
java 039e26ff66f1019cd15a186dfc2e5600aspku.com/kaifa/zhengze/" target="_blank">デフォルトの正規表現は次のとおりです。貪欲な貪欲マッチング モードは、このタイプの最長一致 (.*) です。最短一致が必要な場合は、消極的マッチング モードである (.*?) に変更されます。
原理分析:
欲張りマッチングモードの場合、正規表現エンジンは、一致が false の場合、
バックトラッキングを通じて最後から 2 番目の一致位置を後方に検索し、一致した結果を返します。パターンにかろうじて一致するために、正規表現エンジンはパターンの終了位置に一致する文字と一致し、次に 1 ステップ戻って一致が false であることを確認し、その後バックトラックしてフォールバック一致が存在する最後の位置を見つけます。 true の場合は結果を返します。
コードを見てください:
例1:
public void test51(){ String str = "aaa\"bbb\"ccc\"ddd\"eee"; System.out.println(str); str = str.replaceAll("\"(.*)\"", "@"); System.out.println(str); }出力:
aaa"bbb"ccc"ddd"eee aaa@eee例2:
@Test public void test52(){ String str = "aaa\"bbb\"ccc\"ddd\"eee"; System.out.println(str); str = str.replaceAll("\"(.*?)\"", "@"); System.out.println(str); }出力:
aaa"bbb"ccc"ddd"eee aaa@ccc@eee上記は、分析例のためのJavaプログラムの正規表現の貪欲パターンマッチングの内容です。その他の関連コンテンツにも注目してください。PHP 中国語 Web サイト (www.php.cn)。