【问题标题】:Regular Expression Notepad++ HTML child not contains正则表达式 Notepad++ HTML 子不包含
【发布时间】:2018-02-23 13:36:56
【问题描述】:

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

<request> 可以在<boop> 之前和之后有许多标签(如以下示例中的<beep><bop>)。

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

我试过&lt;request&gt;.*?&lt;\/request&gt; 匹配每个&lt;request&gt;

用消极的前瞻来扩展我得到的:

&lt;request&gt;.*?(?!&lt;boop&gt;).*?&lt;\/request&gt;

但这似乎不起作用。

我在搜索中选择了正则表达式匹配换行符

提前谢谢你。

【问题讨论】:

标签: regex notepad++


【解决方案1】:

在 Notepad++ 中,您可以使用以下正则表达式授予您的 &lt;request&gt; 标签不能嵌套

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

或者

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

查看online demo

请注意,您无需担心 . 匹配换行符 选项与这些模式。第二个与第一个相同,它是它的展开变体(它应该工作得更快,因为它不必在到达 &lt;/request&gt; 结束分隔符的途中测试每个字符,它匹配来自 @ 的整个文本块987654327@ 到 &lt;)。

详情

  • (?s) - 内联 DOTALL 修饰符(= . 匹配换行符 ON)
  • &lt;request&gt; - 开始分隔符
  • (?:(?!&lt;(?:request|boop)&gt;).)*? - 任何字符 (.),0+ 次重复 (*),尽可能少 (?,实际上,*? 量词) 不是以 &lt;request&gt;&lt;boop&gt; 字符开头顺序
  • &lt;/request&gt; - 结束分隔符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2019-01-30
    相关资源
    最近更新 更多