正则表达式可以匹配交错匹配吗?

Can regex match Interleaved matches?

我有一个带有开始标签和结束标签的模式
例如/*tag1_START*/ some content /*tag1_END*/ other text /*tag2_START*/ some content /*tag2_END*/

我使用正则表达式 \/\*([a-zA-Z0-9]+)_START\*\/(.*?)\/\*_END\*

可以看到@regex101

但是,有一种情况是标签交错(错误地):
例如/*tag3_START*/ some /*tag4_START*/ content /*tag3_END*/ other /*tag4_END*/ content

我可以很容易地检查匹配中的重叠,但是 REGEX 不会 return 这两个标签,因为它从它匹配的最后一个字符继续...

我可以使用 Regex 查找重叠匹配项还是我需要编写自己的代码?

(?=\*([a-zA-Z0-9]+)_START\*\/(.*?)\/\*()_END\*)

您将不得不使用前瞻而不是捕获 anything.See 演示。

https://regex101.com/r/vsA3ZU/1

环视确实断言而不是消耗字符。然而,捕获组仍然在其中存储匹配的部分。只需将重叠部分放在正前瞻中:

\/\*([a-zA-Z0-9]+)_START\*\/(?=(.*?)\/\*_END\*)

Live demo