![](/img/trans.png)
[英]java-Match a regex pattern in a string(listing matching and non-matching parts)
[英]Strange Java regex error when matching repeated string parts
我最近在使用Java Regular Expression時遇到了一個奇怪的錯誤:
System.out.println(Pattern.matches("(\\d\\d)", "12")); --> true
System.out.println(Pattern.matches("(\\d\\d)", "11")); --> true
System.out.println(Pattern.matches("(\\d\\d)\\1", "1212")); --> true
System.out.println(Pattern.matches("(\\d\\d)\\1", "1122")); --> false
最后一個怎么了? 任何人都可以幫助我,非常感謝〜
在第三行:
Pattern.matches("(\\d\\d)\\1", "1212")
+------+
12
捕獲的組是12.所以\\1
包含12,並且從12 = 12,你得到了真。
在第四行:
Pattern.matches("(\\d\\d)\\1", "1122")
+------+
11
被捕獲的組是11.所以\\1
繼續11,從11!= 22你得到假。
\\1
是上一場比賽的占位符。 最后一個例子的匹配將是“11”,因此\\ 1變成“11”,這與接下來的兩個數字“22”不匹配。
反向引用與先前由捕獲組匹配的文本匹配 。
和
[還有]一個額外的量詞,允許您指定令牌可以重復的次數
因此,為了匹配分組子模式的兩次出現,只需使用{2}
:
System.out.println(Pattern.matches("(\\d\\d){2}", "1212")); // --> true
System.out.println(Pattern.matches("(\\d\\d){2}", "1122")); // --> true
請參閱IDEONE演示
或者,如果這些子模式不相鄰,則從塊動態構建模式:
String digits = "\\d\\d";
String myRegex = "\\b(?:" + digits + " word|word " + digits + ")\\b";
11
!= 22
....最后一個錯了。
\\1
表示重復組。組有11
\\1
期望11
而不是22
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.