Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 正则表达式将最近的标记与中间的一组单词进行匹配_Html_Regex - Fatal编程技术网

Html 正则表达式将最近的标记与中间的一组单词进行匹配

Html 正则表达式将最近的标记与中间的一组单词进行匹配,html,regex,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>
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解析器。

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

<br>((?!<br>)[\s\S])*Message 2((?!<br>)[\s\S])*<br>
我在这里使用的技巧是使用一个否定的前瞻性来调整。*,它断言后面的不是标记标记。换句话说,!*将消耗所有内容,直到下一个标记


作为免责声明,通常我们不应该使用正则表达式来解析HTML数据。有时,我们被迫这样做,例如,如果我们使用的是记事本++之类的编辑器,它没有HTML解析器。

工作得非常好!非常感谢。