JavaRush /Java 博客 /Random-ZH /Java 正则表达式中的反向链接
eGarmin
第 41 级

Java 正则表达式中的反向链接

已在 Random-ZH 群组中发布
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