Java 正規表示式中的反向引用是 Java 引擎支援的非常有用的功能。
為了理解什麼是反向鏈接,您首先需要學會理解什麼
是組。正規表示式中的群組將多個字元視為一個單元。透過將字元放在括號中來建立群組 - “()”。一對括號是一組。反向連結很方便,因為我們可以重複搜尋模式而無需直接複製它們。
我們只需要使用類似\N 的結構來引用先前定義的群組,其中
N是組號。下面兩個例子讓你感受一下反向連結的便利性。
範例 1:尋找重複模式
(\d\d\d)\1 形式的構造與第 123123 行匹配,但與第 123456 行不匹配。輸出String str = "ля123123ля"; Pattern p = Pattern.compile("(\\d\\d\\d)\\1"); Matcher m = p.matcher(str); System.out.println(m.groupCount()); while (m.find()) { String word = m.group(); System.out.println(word + " " + m.start() + " " + m.end()); }
:
1 123123 2 8
譯者註! 在這裡,作為一名譯者,我想冒昧地插入一些我自己的評論,因為 我自己剛剛學習正規表示式,希望他們能用髒話糾正我:)如果我下面寫的是錯誤:1)groupCount ()方法返回模式中指定的組數,所以即使如果輸入字串是
“ la123”
456 la”,不適合模板,則螢幕上仍會顯示數字1。2)find
()方法 搜尋下一組,但僅返回布林值:true – 找到, false – 未找到 3)
group()方法 傳回從模式中找到的最後一個子字串。在本例中為 123123 4)
start()方法 傳回來源字串中找到的子字串的位置(當然,從零開始編號) 5) end
()方法 傳回緊接找到的子字串在來源字串中的位置子字串。因此,該值並不指向來源字串中找到的子字串的最後一個字符,而是指向它之後的下一個字符。
範例 2:查找重複單字
String pattern = "\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b"; Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); String phrase = "unique is not duplicate but unique, Duplicate is duplicate."; Matcher m = p.matcher(phrase); while (m.find()) { String val = m.group(); System.out.println("Найденная последовательность символов: \"" + val + "\""); System.out.println("Слово-дубликат: " + m.group(1) + "\n"); }
結論:
Найденная последовательность символов: "unique is not duplicate but unique" Слово-дубликат: unique Найденная последовательность символов: "Duplicate is duplicate" Слово-дубликат: Duplicate
請注意,這種查找重複單字(使用正規表示式)的方法並不是最佳的。例如,在上面的範例中,第一個單字“duplicate”被跳過。
GO TO FULL VERSION