1

我在一个 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)。

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

4

1 回答 1

0

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

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

应该检查Regular expressionand选项。. matches newline

请注意,如果有嵌套标签,这可能不起作用<p>,并且假设段落之间只有空格,其中可能包括换行符。

如果您希望带有img标签的段落包含在选择中,请使用

<p((?!</p>).)*</p>\s*<p(.(?!</p>))*<img.*?</p>
于 2013-02-03T17:18:48.313 回答