Php 正则表达式关闭换行符上的打开标记

Php Regex close open tag on line break

我有 html 这样的代码 :

<li>some text
more text

<li>some other text
any more text

我想关闭列表项。项目应在换行符处关闭。 结果应如下所示:

<li>some text<li>
more text

<li>some other text<li>
any more text

这是我的正则表达式,它不起作用:

preg_replace("/<li>+(.*?)+/ig","\2</li>", $o );

它returns什么都没有,而不是:

<li>some text<li>
more text

<li>some other text<li>
any more text

非常感谢

此正则表达式将获取 li 行中的所有内容,\K 将清除匹配并将 cursor 设置到正确的点:

<li>.*\K

然后替换成:

</li>

Regex live here.

这是因为 . 不匹配 \n


有效:

<li>.*(?:(?<!<\/li>)(?=\s*\n))\K

Regex live here.

这是一个如何使用 preg_replace

解决您的问题的示例

Regex live

$count = null;
$returnValue = preg_replace('/<li>(.*)/', '<li></li>', '<li>some text
more text', -1, $count);