博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反向引用 /1, /2...
阅读量:6911 次
发布时间:2019-06-27

本文共 873 字,大约阅读时间需要 2 分钟。

表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 "<td>(.*?)</td>"。

 

其实,"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是"/" 加上一个数字。"/1" 引用第 1 对括号内匹配到的字符串,"/2" 引用第 2 对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号"(" 在前,那这一对就先排序号。

 

举例如下:

举例 1:

表达式 "('|")(.*?)(/1)" 在匹配 " 'Hello', "World" " 时,匹配结果是:成功;匹配到的内容是:" 'Hello' "。再次匹配下一个时,可以匹配到 " "World" "。

 

举例 2:

表达式 "(/w)/1{4,}" 在匹配 "aa bbbb abcdefg ccccc111121111 999999999" 时,匹配结果是:成功;匹配到的内容是"ccccc"。再次匹配下一个时,将得到 999999999。这个表达式要求"/w" 范围的字符至少重复 5 次,注意与 "/w{5,}" 之间的区别。

 

举例 3:

表达式 "<(/w+)/s*(/w+(=('|").*?/4)?/s*)*>.*?<//1>" 在匹配"<td id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。如果"<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。

 

转载于:https://www.cnblogs.com/zhzcode/p/9782956.html

你可能感兴趣的文章
三大闪存芯片的类型比较TLC/MLC/SLC(转载)
查看>>
面试题
查看>>
再见!史上最失败的windows系统!
查看>>
EditText 只能输入数字字母
查看>>
nginx的valid_referers指令——防盗链
查看>>
Spark DecisonTree DebugString Parser
查看>>
Laravel验证码
查看>>
tomcat 服务器 和 servlet 容器
查看>>
varchar(N)和char(N)中的N解析
查看>>
java 执行Sql文件
查看>>
Android开发和iOS开发对比
查看>>
vue中的条件渲染
查看>>
lnmp搭建
查看>>
正确使用差异硬盘创建虚拟机
查看>>
启动时nginx时报错
查看>>
菜鸟学Linux 第063篇笔记 postfix+mysql+courier-authlib
查看>>
【 58沈剑 架构师之路】InnoDB七种锁——共享/排它锁、意向锁、插入意向锁
查看>>
终究未能留下,秦致被动离去,汽车之家已变天
查看>>
wxWidgets第一课 wx/wx.h解决头文件包含问题
查看>>
论Mysql5.7.13架构组成之物理文件
查看>>