正则表达式可以匹配交错匹配吗?
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 演示。
环视确实断言而不是消耗字符。然而,捕获组仍然在其中存储匹配的部分。只需将重叠部分放在正前瞻中:
\/\*([a-zA-Z0-9]+)_START\*\/(?=(.*?)\/\*_END\*)
我有一个带有开始标签和结束标签的模式
例如/*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 演示。
环视确实断言而不是消耗字符。然而,捕获组仍然在其中存储匹配的部分。只需将重叠部分放在正前瞻中:
\/\*([a-zA-Z0-9]+)_START\*\/(?=(.*?)\/\*_END\*)