我一直试图弄清楚这一点无济于事。我在网上查看过很多资源,有些资源很接近但不准确。我们说我有以下代码:
<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解析器。
答案 0 :(得分:1)
试试这个正则表达式模式:
<br>((?!<br>)[\s\S])*Message 2((?!<br>)[\s\S])*<br>
我在这里使用的技巧是用负向前瞻来调整.*
,它断言后面的内容不是标记<br>
标记。换句话说,((?!<br>).)*
将消耗除下一个<br>
标记之外的所有内容。
作为免责声明,通常我们不应该使用正则表达式来解析HTML数据。有时,我们有力量这样做,例如如果我们使用像Notepad ++这样没有HTML解析器的编辑器。