正则表达式匹配最接近的标签,其间有一组单词

时间:2018-04-06 03:19:30

标签: html regex

我一直试图弄清楚这一点无济于事。我在网上查看过很多资源,有些资源很接近但不准确。我们说我有以下代码:

<br>
Message 1
<br>
<br>
Here is Message 2
<br>
<br>
Here is Message 2 (again)
<br>

我想要做的是返回所有消息2以及最近的中断标记之间的文本。以下正则表达式很接近:

<br>[\s\S]*?Message 2[\s\S]*?<br>

但是,它返回以下两个块。第1座:

<br>
Message 1
<br>
<br>
Here is Message 2
<br>

第2座:

<br>
Here is Message 2 (again)
<br>

但是,我需要阻止1返回:

<br>
Here is Message 2
<br>

我收到的邮件总是以这种方式呈现,所以我并不认为我需要一个HTML解析器。

1 个答案:

答案 0 :(得分:1)

试试这个正则表达式模式:

<br>((?!<br>)[\s\S])*Message 2((?!<br>)[\s\S])*<br>

Demo

我在这里使用的技巧是用负向前瞻来调整.*,它断言后面的内容不是标记<br>标记。换句话说,((?!<br>).)*将消耗除下一个<br>标记之外的所有内容。

作为免责声明,通常我们不应该使用正则表达式来解析HTML数据。有时,我们有力量这样做,例如如果我们使用像Notepad ++这样没有HTML解析器的编辑器。