我正在使用"特殊"标签,但我在递归方面有问题。举个例子:
<!-- 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
感谢您的回答,
汤姆
试试这个:
#<!-- BEGIN [a-z]+ -->([a-z ]*(?R)?[a-z ]*)<!-- END -->#
实际上,不要尝试这样做;正如评论中提到的,解析器确实应该优先用于递归解析。但这确实有效。
请注意:
- 我对你的输入做了一些假设(比如假设"foo"和"bar"将始终是字母数字,并且空格是非可选的。您可以轻松地将它们更改回来。
- 它只会捕获最底层的匹配标签。拥有这些后,如果您希望找到任何嵌套匹配项,则需要再次运行它。递归性仅用于匹配开头与其适当的结尾。