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

标签 c# regex match overlap

<分区>

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

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

可以看到@regex101

但是,有一种情况是标签交错(错误地):
例如/*tag3_START*/一些/*tag4_START*/内容/*tag3_END*/其他/*tag4_END*/内容

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

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

最佳答案

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

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

Live demo

关于c# - 正则表达式可以匹配交错匹配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48662918/

相关文章:

mysql - 使用正则表达式将列中的字符与数字分开

MySQL Match Against 在 2 台服务器上给出 2 个不同的结果

javascript - 我如何在没有 www 的情况下匹配域名的根目录。使用正则表达式

c# - 使用远程共享软件进行演示时 WPF 应用程序缓慢无响应

c# - System.Threading.ThreadPool.SetMaxThreads 的默认值

c# - 将长字符串拆分为自定义字符串

javascript - 正则表达式街道地址匹配

c# - 如何访问通用对象中的列表

c# - 在 C# 类中创建列表

java - 如何单独解析并执行文件中的所有 SQL 语句?