JavaRush /Java Blog /Random-TW /Java 正規表示式中的反向連結
eGarmin
等級 41

Java 正規表示式中的反向連結

在 Random-TW 群組發布
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”被跳過。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION