正则表达式将最接近<br>的标签与中间的一组单词匹配



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

<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解析器。

最新更新