Php 如何替换最后一个HTML列表项?

Php 如何替换最后一个HTML列表项?,php,html,string,Php,Html,String,如何替换此字符串中的最后一个li元素 之前: $var = '<li>anything<li/> <li>anything<li/> <li>anything<li/> <li>anything<li/> <li>anything<li/>'; 但这不是预期的产出。如何更改代码以获得预期的输出?这应该适用于您: (这里我只是将字符串拆分

如何替换此字符串中的最后一个
li
元素

之前:

$var = 
   '<li>anything<li/>
    <li>anything<li/>
    <li>anything<li/>
    <li>anything<li/>
    <li>anything<li/>';

但这不是预期的产出。如何更改代码以获得预期的输出?

这应该适用于您:

(这里我只是将字符串拆分为一个数组,然后将最后一个元素替换为一个字符串。顺便说一句:您错误地关闭了li标记)

$var=
“
  • 任何东西
  • 任何
  • 任何
  • 任何
  • 任何
  • ”; $pos=strrpos($var,“
  • ”); echo$final=substr\u replace($var,
  • anything
  • ,$pos);
  • 我也想到了这个解决方案,但是不能用
    regex
    ?@D4V1D当然可以用regex来完成。你也可以使用DOM,如果他有更多类似的事情要做,这可能是最好的。但你为什么要把它复杂化?!我不是在寻找复杂的解决方案,而是最干净的:)此外,OP想要的是
  • 任何东西
  • ,而不是
  • 。我还假设
    任何东西
    都可以是任何单词。您的解决方案仍然有效吗?@D4V1D感谢您的通知,在问题中错过了这一点,只是更新了itword anything==文本、数字、空、所有内容。。。。我事先不知道会有什么变化。如果有什么变化,你可以这样做:
    $replace=substr($var,$pos+4)$replace=substr($replace,0,strlen($replace)-5),而不是echo$final=substr\u replace($var,
  • anything
  • ,$pos)do<代码>echo$final=substr\u replace($var,$replace,$pos)。一般来说,strpos和substr函数的性能比explode/intlode或regex函数更好
    $var = 
       '<li>anything<li/>
        <li>anything<li/>
        <li>anything<li/>
        <li>anything<li/>
        <li class="foo">anything<li/>';
    
    preg_replace('<li>', '<li class="foo">', $var);
    
    <?php
    
        $var = 
            '<li>anything</li>
            <li>anything</li>
            <li>anything</li>
            <li>anything</li>
            <li>anything</li>';
    
        $var = explode(PHP_EOL, $var);
        $var[count($var)-1] = preg_replace("/<li.*?>(.*?)<\/li>/", "<li class='foo'>$1</li>", $var[count($var)-1]);
        $var = implode(PHP_EOL, $var);
    
        print_r($var);
    
    ?>
    
    <li>anything</li>
    <li>anything</li>
    <li>anything</li>
    <li>anything</li>
    <li class='foo'>anything</li>
    
    $var = 
       "<li>anything<li/>
        <li>anything<li/>
        <li>anything<li/>
        <li>anything<li/>
        <li>anything<li/>";
       $pos=strrpos($var,"<li>");
    echo $final=substr_replace($var, '<li class="foo">anything<li/>',$pos);