打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java 正则表达式 ~ 反向引用 1 (作者:梨多情)


正则表达式 “(\\w)\\1” 可以匹配 "aa bbbb abcdefg 111121111" 中的多个字符,
那么“(\\w)\\1\\2”可以匹配什么呢?
下面每段内容分别为不同网友的回答,其中最有用的正解,已注明:

( )表示子表达式
注意:和 [ ] 的区别,[ ]只能匹配单个字符,( )可以匹配多个字符 。
\1表示的是第一个子表达式匹配到的结果,
而不是第一个子表达式匹配到的结果的第一个字符,
这点很重要也很容易搞混了,
也就是代表第一个( ),相应的 \2 就代表第二( ),依次类推。


表达式后边的部分,可以引用前面 "括号内的子匹配,已经匹配到的字符串"。
引用方法是 "\" 加上一个数字。
\1\2:
"\1" 引用第1对括号内匹配到的字符串,
"\2" 引用第2对括号内匹配到的字符串。

反向引用和正向引用是一样的,都是引用前面已经匹配了的值。
所以\1引用的是第一个括号里的内容,即\w匹配的内容。
而由于你没有第二个括号,所以\2什么也不匹配。

【lsl -- 正解啊!】
当使用小括号指定一个子表达式时,即可得到匹配的文本,即分组的内容。
规则从左到右,以分组的左括号为标志,第一个出现的分组组号为1,类类推。
\1是 \w 匹配的内容,即整个字符串“aa bbbb abcdefg 111121111”
由于没有第二个分组,所以\2匹配为空。

其实反向引用在实现上和匿名捕获的实现方式很相似
(其名字其实就是\1 \2,我写的正则表达式的引擎里是这么做的,
其他大的库我没有做研究,不过从原理上猜测是一样的)。
\1\2就是前面出现的()括起来顺序出现的子表达式
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
emedit查找技巧
正则表达式参考文档
快速回忆正则表达式
正则表达式() [] {}区别
.net c# 正则表达式 平衡组/递归匹配
正则表达式从入门到精通 - zjcxc(邹建)的专栏
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服