Java正则表达式之反向引用(Backreferences)
来源:互联网 发布:php开源博客 编辑:程序博客网 时间:2024/06/12 00:28
反向引用(Backreferences)是Java正则表达式的重要特性。
运行结果:
Phone:1234567890,Formatted Phone:(123)456-7890
Phone:9876543210,Formatted Phone:(977)654-3210
也可以通过正则替换完成:
反向引用非常方便,因为它允许重复一个模式(pattern),无需再重写一遍。我们可以使用\#(#是组号)来引用前面已定义的组。比如一个文本以abc开始,接着为xyz,紧跟着abc,对应的正则表达式可以为“abcxyzabc”,也可以使用反向引用重写正则表达式,“"(abc)xyz\1"”,\1表示第一组(abc)。\2表示第二组,\3表示第三组,以此类推。
使用反向引用匹配2-5个字母的回文(palindromes)。
例子:
\b(\w)?(\w)\w?\2\1
为了理解反向引用,我们先对解释Java正则表达式里面的组。组在正则表达式中意味着将多个字符作为一个单独的单元,通过将字符放在()中,每个()代表一个组。每一组都有一个行号,从1开始。Matcher类的groupCount方法返回模式(pattern)关联Matcher实例组的个数。第0组指向整个表达式。
String regex = "\\b(\\d{3})(\\d{3})(\\d{4})\\b"; Pattern p = Pattern.compile(regex); String source = "1234567890, 12345, and 9876543210"; Matcher m = p.matcher(source); while (m.find()) { System.out.println("Phone: " + m.group() + ", Formatted Phone: (" + m.group(1) + ") " + m.group(2) + "-" + m.group(3)); }注:\b表示只匹配在单词边界的10个数字。
运行结果:
Phone:1234567890,Formatted Phone:(123)456-7890
Phone:9876543210,Formatted Phone:(977)654-3210
也可以通过正则替换完成:
String regex = "\\b(\\d{3})(\\d{3})(\\d{4})\\b"; String replacementText = "($1) $2-$3"; String source = "1234567890, 12345, and 9876543210"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(source); String formattedSource = m.replaceAll(replacementText);
反向引用非常方便,因为它允许重复一个模式(pattern),无需再重写一遍。我们可以使用\#(#是组号)来引用前面已定义的组。比如一个文本以abc开始,接着为xyz,紧跟着abc,对应的正则表达式可以为“abcxyzabc”,也可以使用反向引用重写正则表达式,“"(abc)xyz\1"”,\1表示第一组(abc)。\2表示第二组,\3表示第三组,以此类推。
使用反向引用匹配2-5个字母的回文(palindromes)。
例子:
\b(\w)?(\w)\w?\2\1
my dad sees a kayak at noon
(\w)a\1
hah dad bad dab gag gab
参考资料:
RegExrv 2.0
0 0
- Java正则表达式之反向引用(Backreferences)
- 正则表达式之反向引用
- 正则表达式之反向引用
- 正则表达式反向引用
- 正则表达式:反向引用
- 正则表达式:反向引用
- 正则表达式反向引用
- 正则表达式 反向引用
- 正则表达式学习指南(十二)----Grouping and Backreferences
- 正则表达式 分组捕获(反向引用)
- 正则之反向引用
- 正则表达式中的反向引用
- 12.正则表达式:反向引用
- 正则表达式中的反向引用
- 正则表达式的反向引用
- 正则表达式的反向引用
- javascript 正则表达式 反向引用
- javascript 正则表达式 反向引用
- jsp乱码问题的讨论
- 模式识别 评价方法 ROC曲线, DET曲线, FPPW, FPPI etc.
- CentOS Linux解决Device eth0 does not seem to be present及设置固定ip
- 80端口被係統佔用,nginx/apache無法啟動,解决方案
- linux/ubuntu下安装nginx时./configure后出现几种错误的解决方法
- Java正则表达式之反向引用(Backreferences)
- CXF调用web service
- UVa 232 - Crossword Answers【字符串】
- 软考专项复习总结(一)
- Kinect for Windows V2和V1对比开发___骨骼数据获取并用OpenCV2.4.10显示
- 大型网站之分布式会话管理
- unity3D 调用set和get方法
- x-www-form-urlencoded与multipart/form-data区别
- BZOJ 2683/4066(简单题-kd-tree重构)