我有一个带开口标签和关闭标签的模式
例如/*tag1_START*/ some content /*tag1_END*/ other text /*tag2_START*/ some content /*tag2_END*/
我使用正则表达式\/\*([a-zA-Z0-9]+)_START\*\/(.*?)\/\*\1_END\*
可以看到@ regex101
但是,有一种情况是标签交错(错误地):
例如/*tag3_START*/ some /*tag4_START*/ content /*tag3_END*/ other /*tag4_END*/ content
我可以很容易地检查匹配中的重叠,但是REGEX不会返回两个标记,因为它从匹配的最后一个字符继续...
我可以使用Regex查找重叠匹配,还是需要编写自己的代码?
答案 0 :(得分:1)
Lookarounds会断言而不是消耗字符。但是,捕获组仍会在其中存储匹配的部分。只需将重叠部分放在积极的前瞻中:
\/\*([a-zA-Z0-9]+)_START\*\/(?=(.*?)\/\*\1_END\*)
答案 1 :(得分:0)
(?=\*([a-zA-Z0-9]+)_START\*\/(.*?)\/\*(\1)_END\*)
你必须使用前瞻而不是捕捉任何东西。参见演示。