正则表达式: 回溯应用<前后一致匹配>
子表达式回顾:子表达式即把一组字符编组为一个字符集合
1. 这样的字符集合主要用于精确设定需要重复匹配的文本及其重复次数。
2 用于回溯引用
实例一: 假设有下面以文本内容:
<h1>魔兽世界</h1>
<ul><a href="http://zhanhun.uuu9.com/hd/zhanhun0927.html">斩魂</a>
<li>单机游戏</li>
</ul>
<h1>植物大战僵尸</h2>
<h3>小游戏</a></h3>
<td>愤怒的小鸟</td>
现在要找出所有标题文字,不管其实多少级。
如是很容易想到如下的正则模式: [hH][1-6].*?[hH][1-6] 初看没有任何问题,但是匹配发现结果如下:
<h1>植物大战僵尸</h2>
<h3>小游戏</a></h3>
<h1>魔兽世界</h1>
上面的结果中很显然你会发现有一个非法的标题进入(<h1>植物大战僵尸</h2>),应该是被过滤掉的。
出现这种情况的根源在第二部分<用来匹配结束标签的那个部分>对这个模式的第一部分<用来匹配开始标签的那个部分>毫无所知。 要想解决这样在此只能依靠
回溯引用了。
第二个实例: 找出一文本中所有连续重复出现的单词找出来。很明显,在搜索某个单词的第二次出现时,这个单词必须是已知的。
回溯匹配引用容许正则表达式模式引用前面的匹配结果。
文本内容: I will wait wati for you you at airport tonight at five sharp sharp o'clock.
正则表达式模式: []+(\w+)[]+\1
上面的模式找到了所想要的东西,如何做到的呢?
[]+ 匹配一个或多个空格, \w+匹配一个或多个字母数字字符,[]+匹配随后的空格。
注意: \w+是在()里面的,它是一个子表达式。 这个子表达式不是用来进行重复匹配的,这里根本不涉及重复匹配的问题。
这个子表达式只是把整个模式的一部分单独划分出来一边在后面引用。
这个模式最后的部分是\1;这是一个回溯引用,而他引用的正事前面火焚出来的那个子表达式:当(\w+)匹配但wati 的时候,\1也匹配单词wait;....
注意: 回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。 \1代表这模式里的第一个子表达式;\2代表这第二个子表达式...
通过实例二,可以回想实例一的解决办法:<([hH][1-6])>.*?</\1> 或者<[hH]([1-6]).*?</[hH]\1>
特别提醒: 不同的正则表达式在实现回溯引用的语法方面往往有这巨大的差异。
分享到:
相关推荐
稀疏度自适应正则回溯匹配追踪算法(SAMP algorithm based on regularized backtracking,SAMP-RB)是一种有效的压缩感知重构算法,在原子选择阶段引入回溯的思想,提高了重构精度,减少了重构时间。但SAMP-RB算法...
主要介绍了正则表达式学习教程之回溯引用backreference,结合实例形式详细分析了回溯引用的概念、功能及实现技巧,需要的朋友可以参考下
当一个正则表达式扫描目标字符串时,从左到右逐个扫描正则表达式的组成部分,在每个位置上测试能不能找到一个...但是,如果所选择的方案未能发现相应匹配,或者后来的匹配也失败了,正则表达式将回溯到最后一个决策点,
如果正则表达式的内容需要被再次引用,那么需要对正则表达式的内容进行分组
我通常在匹配一个字符串或是一组数字的时候会用到正则表达式,但很少会了解它是如何真正开始工作的?它的工作原理是什么?其实正则表达式里面的猫腻还挺多水也挺深的,有时候还不太好理解。
贪婪、非贪婪与回溯PHP正则表达式的效率 回溯与固化分组正则表达式之回溯AS3 js正则表达式 反向引用(backreference)详解JavaScript正则表达式之分组匹配及反向引用php正则表达式的模式修正符和逆向引用使用介绍PHP...
而本软件正是把强大的正则功能完美地添加到表格中,让 Excel、WPS 支持正则表达式的搜索、匹配提取、替换、定位等,让数据处理能力进化一个层次! 让 Office Excel、WPS 表格支持正则表达式的免费插件:「Excel ...
L03(验证控件与正则表达式) L03(验证控件与正则表达式)
旨在为学习易语言正则表达式,学习正则要点,学习如何书写。
正则表达式,正则表达式,正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式
常用正则表达式 正则表达式 常用正则表达式 正则表达式
本书从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值和前后查找,等等。每章都为读者准备了许多简明又实用的示例,有助于全面、系统、快速掌握正则表达式,并运用它们去解决实际...
正则表达式教程 正则码 正则表达式教程 正则码 正则表达式教程 正则码正则表达式教程 正则码 正则表达式教程 正则码 正则表达式教程 正则码 正则表达式教程 正则码
C# 正则表达式 集合 C# 正则表达式 集合 C# 正则表达式 集合
正则表达式 正则表达式 正则表达式 正则表达式
正则表达式 正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式
正则表达式