[align=center][b]正则的回溯引用在替换操作中的应用[/b][/align]
[b]正则表达式适合用于复杂的替换,尤其是需要使用回溯引用的场合,这样才能体现出正则表达式的威力。[/b]
[b]
关注: 回溯引用语法在不同的正则表达式实现里有很大的差异: javaScript 用户需要用$来代替\。
提示: 同一个子表达式可以被引用任意多次---只要在需要用到它的地方写出它的回溯引用就行了。
[/b]
[b]小结[/b]
[b]回溯引用离不开子表达式,子表达式的存在给回溯引用带来可能。
回溯应用在搜索+替换中非常有用。[/b]
[b]正则表达式适合用于复杂的替换,尤其是需要使用回溯引用的场合,这样才能体现出正则表达式的威力。[/b]
现在一Html中有如下的文本: Hello , wangvipjian@163.com is my email address. 需要将email邮箱全都转换为可点击的连接,该怎么办:
1. 先找出email Address . 可使用正则表达式模式:
2. 使用正则表达式完成替换。
正则表达式: \w+[\w\.]*@[\w\.]+\.\w 结果: wangvipjian@163.com
现在需要使用<a href="mailto:wangvipjian@163.com">wangvpjian@163.com</a>这样的语法来常见一个可点击的电子邮件地址。
此时就需要用到回溯引用:
正则表达式:(\w+[\w\.]*@[\w\.]+\.\w ) 替换:<a href="mailto:$1">$1</a>
替换操作需要用到两个正则表达式: 一个用来给出搜索模式,另一个用来给匹配文本的替换模式。 回溯引用可以跨模式使用,在第一个模式里
被匹配的子表达式可以用在第二个模式里。 这里使用的模式(\w+[\w\.]*@[\w\.]+\.\w ) 与之前使用的完全一样(匹配电子邮件)但是这次把它写成了
一个子表达式。 这样一来,被匹配到的文本就可以用在替换模式力量。
[b]
关注: 回溯引用语法在不同的正则表达式实现里有很大的差异: javaScript 用户需要用$来代替\。
提示: 同一个子表达式可以被引用任意多次---只要在需要用到它的地方写出它的回溯引用就行了。
[/b]
[b]为了加强理解,再引入另一个实例:[/b]
将下面每行的文本重新写成: (231) 458-098.
432-789-780
347-092-929
280-021-345
正则表达式: (\d{3})(-)(\d{3})(-)(\d{3}) 替换:($1) $3$5
注意: 在对文本进行重新排版的时候,把文本分解成多个子表达式的做法往往非常有用,可以让我们对文本的排版效果做到精细的控制。
大小写转换: 有些正则表达式容许我么您使用下面的元字符对字母进行大小写转换。
\E 结束\L和\U转换
\l 把下一个字符转换为小写 \L 把\L到\E之间的字符全部转换为小写
\u 下一个字符转换为大写 \U 把\L到\E之间的字符全部转换为大写
小例: 讲<h1></h1>的标题文字转换为大写。 正则: (<[Hh]1>)(.*?)(</[Hh]1>) 替换:$1\U$2\E$3
[b]小结[/b]
[b]回溯引用离不开子表达式,子表达式的存在给回溯引用带来可能。
回溯应用在搜索+替换中非常有用。[/b]