貪欲、消極的、独占欲の違い
例
上の表を見ると、これら 3 つの数量詞の意味は同じであることがわかります (X?、X など)。 ??、X?+ はすべて 1 回か 1 回ではないかを意味します) が、それらの間にはまだ微妙な違いがいくつかあります。最初に例を見てみましょう:
1.Greedy
Rreee -Result:form 0〜132.relecuctantrreee
result:0〜4の一致したフォーム4〜13 3.Possessivepublic static void testGreedy() { Pattern p = Pattern.compile(".*foo"); String strText = "xfooxxxxxxfoo"; Matcher m = p.matcher(strText); while (m.find()) { System.out.println("matched form " + m.start() + " to " + m.end()); } }結果://不一致に成功しました原理の説明貪欲な量指定子は、最初に一致を試みるときにマッチャーが入力文字列全体を読み取ることを強制されるため、「貪欲」と呼ばれます。最初の照合試行が失敗すると、文字は後ろから前へ 1 文字ずつロールバックされ、照合が成功するか頼る文字がなくなるまで照合が再試行されます。 パターン文字列: .*foo検索文字列: ) 位置。文字列全体が試行されるまで、一度に 1 文字ずつほとんど読み取られません。 パターン文字列: .*foo検索文字列: xfooxxxxxxfoo結果: 0 ~ 4 の形式に一致
4 ~ 13 の形式に一致
比較プロセスは次のとおりです
所有量指定子は常にGreedy とは異なり、Possessive はロールバックすることはなく、ロールバックしたとしても全体的な一致が成功する可能性があります。 パターン文字列: .*foo検索文字列: xfooxxxxxxfoo結果://正常に一致しませんでした
比較手順は以下の通りです
参考記事: http://docs.oracle.com/ javase /tutorial/essential/regex/quant.htmlさらにいくつかの例を見てみましょう: パターン文字列: .+[0-9]検索文字列: abcd5aabb6結果: 0 ~ 10 の形式と一致しました
パターン文字列: .+?[0-9]
検索文字列: abcd5aabb6
結果: 0 ~ 4 の形式に一致しました
パターン文字列: .{1,9}+[0-9]
検索文字列: abcd5aabb6
結果: 0から10の形式に一致
パターン文字列: .{1,10}+[0-9]
検索文字列: abcd5aabb6
結果: 一致に失敗しました