Php正则表达式换行符上的close-open标记

Php正则表达式换行符上的close-open标记,php,regex,preg-replace,Php,Regex,Preg Replace,我有如下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 一些文本 更多文本 其他一些文本 还有文本吗

我有如下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 );
    
    preg_替换(“/
  • +(.*?+/ig)”,“\\2
  • ”,$o);
    它不返回任何内容,而是:

    <li>some text<li>
    more text
    
    <li>some other text<li>
    any more text
    
  • 一些文本
  • 更多文本
  • 其他一些文本
  • 还有文本吗

  • 非常感谢

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

    <li>.*\K
    

    下面是一个如何解决preg\u replace问题的示例

    $count=null;
    $returnValue=preg_replace('/
  • (.*)/','
  • $1
  • ,'
  • 某些文本 更多文本',-1,$count);
  • </li>
    
    <li>.*(?:(?<!<\/li>)(?=\s*\n))\K
    
    $count = null;
    $returnValue = preg_replace('/<li>(.*)/', '<li>$1</li>', '<li>some text
    more text', -1, $count);