正则表达式替换包含文本的thatgs

regex to replace thatgs containing text

我正在编写一个快速 php 脚本,但我遇到了以下问题。

我需要通过一个html代码,找到下面的"type of line"

<p>2:45 text goes here</p>

其中2:45是时间戳,这里的文字是可变文本,替换成

<li>same timestamp same text goes here</li>

无法进行 str 替换,因为 html 中有很多 <p>,这是我寻找正则表达式模式的原因。

我还注意到我还有另一个可能的匹配项是:

<p>43:41 - text goes here</p>

只要我能把开头的 p 改成 li 并去掉破折号就可以了。

我不太擅长正则表达式,所以我真的无法理解它,所以非常感谢任何帮助。

干杯!

匹配

<p>(\d+:\d+ ((?!<\/p>).)+)<\/p>

换句话说,一个 <p> 后跟一个时间戳,最终以 </p> 结束捕获组中 <p> 内的整个文本,并替换为捕获的组一个 <li>:

<li></li>

https://regex101.com/r/sC8RfZ/1

$str = '<p>2:45 text goes here</p>
<p>43:41 - text goes here</p>';
$str = preg_replace('/<p>(\d+:\d+ ((?!<\/p>).)+)<\/p>/','<li></li>',$str);
echo $str;