Java正则表达式中的反向引用

时间:2024-03-28 10:01:55

Java正则表达式中的反向引用是Java提供的另一个重要功能。
要了解反向引用,我们首先需要了解群组。正则表达式中的分组意味着将多个字符视为一个单元。通过将要分组的字符放在一组括号“()”中来创建它们。每组括号对应一个组。
反向引用很方便,因为它使我们无需重复编写就可以重复一个模式。我们可以使用\#(#是组号)来引用先前定义的组。阅读以下两个示例后,这将更有意义。
示例1:查找重复图案
(\ d \ d \ d)\ 1匹配123123,但不连续匹配123456。这表明所引用的模式必须确切地是名称。
String str = “123456”;
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 0 6
示例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(“Matching subsequence is “” + val + “””);
System.out.println("Duplicate word: " + m.group(1) + “\n”);}
匹配的子序列是“唯一不是重复但唯一”
重复单词:唯一
匹配的子序列为“重复是重复的”
重复单词:Duplicate
注意:这不是使用正则表达式查找重复单词的好方法。从上面的示例中,第一个“重复项”不匹配。
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。Java正则表达式中的反向引用