【发布时间】:2018-07-17 16:34:50
【问题描述】:
我有一个带有开始标签和结束标签的模式
例如/*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 来查找重叠匹配项还是我需要编写自己的代码?
【问题讨论】:
-
听起来像recursion in Regex。
-
@WiktorStribiżew 只是它会找到它......(我会自己检查实际的重叠)只是所有匹配项的索引和长度
-
revo.. 太棒了...把它作为答案。
-
@WiktorStribiżew 你是部分正确的,匹配不包括整个表达式。但无论如何我都会遍历捕获组,所以我确实有我需要的位置。