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");
}
Matching subsequence is “unique is not duplicate but unique”
Duplicate word: unique
Matching subsequence is “Duplicate is duplicate”
Duplicate word: Duplicate

注意:这不是使用正则表达式查找重复单词的好方法。 从上面的示例中,第一个“重复项”不匹配。

为什么要使用反向引用?

  • 查看更多正则表达式示例 。
参考:我们的JCG合作伙伴 Wang Xiaoran在Programcreek博客上的Java正则表达式中的反向引用 。

翻译自: https://www.javacodegeeks.com/2013/09/backreferences-in-java-regular-expressions.html

Java正则表达式中的反向引用相关推荐

  1. Java正则表达式中的捕获组的概念及相关API使用

    要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对"()"分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次 ...

  2. java pattern matches,Java正则表达式中的Pattern.matches()方法

    java.util.regex.Pattern.matches()方法匹配正则表达式和给定的输入.它有两个参数,即正则表达式和输入.如果正则表达式和输入匹配,则返回true,否则返回false. 给出 ...

  3. 关于Java正则表达式中转义符“\\”的使用

    一.前言 在复习到正则表达式这一部分的内容时,我注意到Java中要想使用转义符必须要用双反斜杠来达到其他语言中单反斜杠的效果,出于对这个问题的好奇我查阅了一些资料,并初步了解了Java正则表达式中转义 ...

  4. Java 8 中的方法引用,轻松减少代码量,提升可读性!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1. 引言 Java8中最受广大开发中喜欢的变化之一是因为 ...

  5. Java 正则表达式中为什么反斜杠“\“需要用“\\\\”表示

    正则表达式语法 在其他语言中,\\(两个斜杠) 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义. 在 Java 中,\\ (两个斜杠)表示:我要插入一个正则表达式 ...

  6. backreference Oracle正則表達式中的反向引用

    这是Oracle对正則表達式的backreference的描写叙述 从定义中能够看到,当匹配表达式中已()的形式将一个子串包括起来.后面就能够以\? 的形式来引用.\1相应第一个(),\2相应第二个. ...

  7. php 正则匹配反向引用,php正则表达式子模式的反向引用学习笔记

    需要用正则表达式获取字符串的标题.标题标签是h1~h6. 使用正则表达式:"@(.*?)@"或者'(.*?)@'.使用了@作为分隔符,注意单双引号的差别\\1与\1. 例1 代码如 ...

  8. Java 正则表达式 中的 任意字符

    原来正则表达式中的"."代表的是除换行以外的任意字符,如果要真正代表任意字符,需要把换行符也加进去,但是经过测试"[.\\n]"不生效,可以使用"\\ ...

  9. java正则表达式中的数量词介绍及区别

    Java的正则表达式相关的类位于 java.util.regex 包中; 这个包中只有一个 MatchResult 接口和 Matcher.Pattern 两个类; 有关正则表达式的使用请参考Java ...

最新文章

  1. 在编写flash游戏播放声音时的一个要注意的地方
  2. 生于拉新,死于留存!如何找到 Aha moment?
  3. Redis命令:SETNX key value(SET if Not eXists)
  4. python中requests的用法总结
  5. Linux用某一用户创建文件,Linux创建用户,并赋予管理指定目录的权限
  6. spring boot 如何修改默认端口号和context path
  7. 【零基础学Java】—包装类(三十七)
  8. 2020 年百度之星#183;程序设计大赛 - 初赛一
  9. Java依旧排名第一,然而变化几何?
  10. PCalc for Mac(科学计算器)
  11. android native c++ 打印调用栈
  12. linux命令检索字符串,用Linux的grep命令查找文件中符合条件的字符串
  13. 2020年acwifi拆过的无线路由器配置汇总
  14. 18年怎么将win7升级到win10教程
  15. npm install 报错(npm ERR! errno 1)
  16. 苹果开发者账号续费不显示续费按钮的解决方法!
  17. kali字体设置-各种字体图标大小调整总结
  18. for,while,do...while循环语句的基本知识
  19. crm项目大纲,SSM回顾
  20. github+hexo搭建自己的博客网站(六)进阶配置(搜索引擎收录,优化你的url,添加RSS)...

热门文章

  1. 查找前端依赖 jquery css js 时间控件 不要用远程依赖 会变化的 card
  2. centos7离线安装oracle11g,CentOS 7.5离线安装Oracle 11gR2
  3. (转)base64编码(严格说来,base64不算作加解密算法)
  4. 分类器评估参数——准确度和精度的区别(足球荔枝)
  5. ReviewForJob——算法设计技巧(贪婪算法+分治算法+动态规划)
  6. Docker-Desktop储存路径更改
  7. 微信JS-SDK实现分享功能
  8. owasp maven_OWASP依赖性检查Maven插件–必须具备
  9. ljc.framework_Java 9模块系统(拼图)@ LJC的HackTheTower
  10. 将经过身份验证的用户注入Spring MVC @Controllers