NotePad ++的正则表达式 - 否定字符串

时间:2013-02-03 15:54:56

标签: regex notepad++

我在一个HTML块中有一系列段落。大多数文本都带有一些超链接标记。有时,段落后面跟着只包含图像的段落。所以:

<p1>...text..<a>...</a>...text...</p>
<p2>...text..<a>...</a>...text...</p>
<p3><img></p>
<p4>...text..<a>...</a>...text...</p>

我正在尝试在NotePad ++中找到一个用于查找/替换的正则表达式,该正则表达式将匹配一个段落,后面跟一个包含图像的段落(我想将它们包装在一个标记中)。

这似乎正确匹配单个段落而不再是:

<p(?!.*<p)?(.*?)</p>

但是当我尝试添加与下面的图像段落匹配的任何内容时,正则表达式开始向后匹配以包含图像段落之前的每个段落(即,从p1到p3,而不是从p2到p3)。

解决方案需要包含匹配换行符的点字符(无论如何。在段落文本中有回车符。)

1 个答案:

答案 0 :(得分:0)

要匹配包含img标记的段落之前的段落,您可以使用

<p((?!</p>).)*</p>(?=\s*<p(.(?!</p>))*<img.*?</p>)

应检查Regular expression. matches newline选项。

请注意,如果存在嵌套的<p>标记,则可能无效,并且它假定段落之间只有空格(可能包含换行符)。

如果您希望带有img标记的段落包含在选择使用

<p((?!</p>).)*</p>\s*<p(.(?!</p>))*<img.*?</p>