正则表达式匹配和嵌套元素

时间:2015-03-24 22:48:02

标签: php regex

我有这个正则表达式代码:

 <!--\s?BEGIN (\w+) \s?-->(.*?)<!--\s?END \w+\s?-->

哪个匹配

<!-- BEGIN some_functional_name -->
     //some stuff here later
<!-- BEGIN some_functional_name -->

我需要注意嵌套注释以及名称是否相同。例如

<!-- BEGIN some_functional_name -->
     //some stuff here later
     <!-- BEGIN another_functional_name -->
          //it'll match up to the below end another_functional_name
     <!-- END another_functional_name -->
<!-- END some_functional_name -->

正如您所看到的那样,它是嵌套的,但正则表达式将捕获ENDBEGIN不匹配的倒数第二个END注释。有没有一种方法来获取内联正则表达式捕获组?

示例:

 <!--\s?BEGIN (\w+) \s?-->(.*?)<!--\s?END $1\s?-->

虽然我对如何处理嵌套也一无所知?我应该使用积极的外观还是什么?

1 个答案:

答案 0 :(得分:1)

您应该使用backreference,例如'\ 1'。

    <!--\s?BEGIN (\w+) \s?-->(.*?)<!--\s?END \1\s?-->

这是example