正则表达式的高级技巧8个常用的概念(6)

http://www.itjxue.com  2015-08-06 23:50  来源:未知  点击次数: 

6. 递归(Recursion)

递归(Recursion)用于匹配嵌套结构,例如括弧嵌套, (this (that)),HTML标签嵌套
。我们使用(?R)来代表递归过程中的子模式。下面是一个匹配嵌套括弧的例子:

/\(((?>[^()]+)|(?R))*\)/

最外层使用了反义符的括号“(”匹配嵌套结构的开端。然后是一个多选项操作符( * | * ),可能匹配除括号外的所有字符 “(?>[^()]+)”,也可能是通过子模式“(?R)”来再次匹配整个表达式。请注意,这个操作符会尽量多地匹配所有嵌套。
递归的另一个实例如下:

/< ([\w]+).*?>((?>[^<>]+)|((?R)))*< \/\1>/

以上表达式综合运用了字符分组,贪婪操作符、回溯,以及最小化组团来匹配嵌套标签。第一个括弧内分组([\w]+)匹配出标签名,用于接下来的应用。若找到这尖括号样式的标签,则尝试寻找标签内容的剩余部分。下一个括弧括起来的子表达式和上一个实例非常相似:要么匹配不包括尖括号的所有字符 ?>[^<>]+,要么递归匹配整个表达式(?R)。表达式最后的< \/1>代表闭合标签。

(责任编辑:IT教学网)

更多

推荐Javascript/Ajax文章