我一直试图弄清楚这一点,但无济于事。我在网上查看了许多资源,有些资源很接近但不准确。假设我有以下代码:
<br>
Message 1
<br>
<br>
Here is Message 2
<br>
<br>
Here is Message 2 (again)
<br>
我想做的是返回所有消息 2 和最接近的中断标记之间的文本。以下正则表达式很接近:
<br>[sS]*?Message 2[sS]*?<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解析器。
试试这个正则表达式模式:
<br>((?!<br>)[sS])*Message 2((?!<br>)[sS])*<br>
演示
我在这里使用的技巧是用负面的展望来缓和.*
,断言接下来的内容不是标记<br>
标签。 换句话说,((?!<br>).)*
将使用所有内容,直到排除下一个<br>
标签。
作为免责声明,通常我们不应该使用正则表达式来解析 HTML 数据。 有时,我们被迫这样做,例如,如果我们使用像Notepad++这样的编辑器,它没有HTML解析器。