回溯引用

2017-12-14 16:47:52
linefo
1119
最后编辑:linefo 于 2017-12-14 17:07:25


越来越难理解啦!不慌,慢慢看。


要学习,先从问题出发。我们看下面这段文本:

<h1>标题</h1>
<h2>标题</h2>
<h3>标题</h4>

需求是:找到所有合法的<h>标签段,如“<h1>标题</h1>”。

机智如你可能会尝试下面这种表达式:

【例子】<[Hh][1-6]>.*</[Hh][1-6]>


问题来了,<h3>标题</h4>”不合法啊!

这类要考虑 前后一致性 的情况,我们可以用回溯引用解决。


【例子】改造后,<[Hh]([1-6])>.*</[Hh]\1>


比起之前的例子,这里把 [1-6] 变成了一个子表达式,再使用了 \1 。

\1 代表对 第一个子表达式 的引用(同理,\2 代表 对 第二个子表达式 的引用,从1开始计数)

像不像变量?像不像变量?像不像变量?

需要注意的是,\1 这种表达方式不适合所有环境,比如,在Javascript中,用的是 $1 这种表达方式!