2

我正在使用“特殊”标签,但我遇到了递归问题。有一个例子:

<!-- BEGIN foo --> parent text <!-- BEGIN bar --> child text <!-- END --> aditional parent text<!-- END --> <!-- BEGIN foobar --> third text <!-- END -->

当我使用[^BEGIN]它时效果很好,直到我没有在标签内输入 B。与它相同[^<!\-\-]。我一直在玩(?!BEGIN)(?<!BEGIN)但没有成功。

我的最后一次尝试看起来像这样(但它不起作用):

#<!--\s?BEGIN\s?(.+?)\s?-->((?!BEGIN).|(?R))*<!--\s?END\s?-->#s

谢谢你的回答,
汤姆

4

1 回答 1

0

尝试这个:

#<!-- BEGIN [a-z]+ -->([a-z ]*(?R)?[a-z ]*)<!-- END -->#

实际上,不要那样尝试;正如评论中提到的,解析器确实应该优先用于递归解析。但这确实有效_

请注意:

  • 我对您的输入做了一些假设(例如假设 'foo' 和 'bar' 将始终是字母数字,并且空格是非可选的。)您可以很容易地将它们改回来。
  • 它只会捕获最底层的匹配标签。一旦你有了这些,如果你想找到任何嵌套的匹配项,你需要再次运行它。递归性仅用于匹配开始与适当的结束。
于 2012-06-06T19:10:37.740 回答