正则表达式Notepad ++ HTML子元素不包含

时间:2018-02-23 13:36:56

标签: regex notepad++

我有一个包含许多<request>个元素的文件,并且我想查找不包含<request>的所有<boop>个标记。

<request><boop>之前和之后可以包含多个标记(例如下面示例中的<beep><bop>)。

<request>
   <beep>
   </beep>
   <boop>
   </boop>
   <bop>
   </bop>
</request>

我已尝试<request>.*?<\/request>匹配每个<request>

凭借一种消极的向前看,我得到了:

<request>.*?(?!<boop>).*?<\/request>

但这似乎不起作用。

我的正则表达式匹配用我的搜索选择的换行符

提前谢谢。

1 个答案:

答案 0 :(得分:1)

在Notepad ++中,您可以使用以下正则表达式授予您的<request>标签无法嵌套

(?s)<request>(?:(?!<(?:request|boop)>).)*?</request>

或者

<request>[^<]*(?:<(?!(?:request|boop)>)[^<]*)*</request>

查看online demo

请注意,您无需担心这些模式的 .匹配换行符选项。第二个与第一个相同,它是它的展开变体(它应该工作得更快,因为它不必测试每个char到</request>结束分隔符的路径,它匹配整个文本块从<<)。

<强>详情

  • (?s) - 内联DOTALL修饰符(= .匹配换行符 ON)
  • <request> - start delimiter
  • (?:(?!<(?:request|boop)>).)*? - 任何字符(.),0 +重复(*),尽可能少(?,实际上,*?量词)没有开始<request><boop>字符序列
  • </request> - 结束分隔符。