正则表达式否定先行忽略代码部分

Regex negative lookahead ignore section of code

我有一些正则表达式可以在 xml 中找到一段代码。但是,我希望它使用记事本++忽略在 middle.im 中设置特定标记的一段代码。 下面是我的代码的简化版本。

</Question>
ABC
123
<answer>

</Question>
ABC
<Question>
123
<answer>

我的正则表达式选择了两组,但我希望它忽略第二组,因为标签

这是我试过的正则表达式。

(?s-i)<\/Question>(?:(?!\<Question>)).*(<answer>)

感谢您的帮助!

如果要忽略第二组,则不应交叉匹配<Question></Question>

由于 (?s) 点匹配每个字符,包括换行符 .* 将匹配到行尾,然后回溯以匹配 <answer> 匹配所有行.

您可以匹配单个字符,然后检查直接在右边的不是 <Question></Question> 并将 / 设为可选。

你可能会用到

(?s-i)</Question>(?:(?!</?Question>).)*<answer>

模式匹配:

  • (?s-i) 内联修饰符,点匹配换行符并关闭不区分大小写的匹配
  • </Question>字面匹配
  • (?:非捕获组
    • (?! 否定前瞻,断言直接在右边的不是
      • </?Question> 匹配 </Question>? 匹配 0 或 1 次
    • ). 如果断言为真,则匹配单个任意字符
  • )* 关闭群组并可选择重复
  • <answer>

Regex demo