用php替换最后一个类 $list=” 照片 照片 照片 照片 照片 照片 照片 照片 照片 ';

用php替换最后一个类 $list=” 照片 照片 照片 照片 照片 照片 照片 照片 照片 ';,php,replace,Php,Replace,如何将最后一个的类从“女性”替换为“男性” 我们最终应该得到: $list = '<ul> <li class="woman">photo</li> <li class="woman">photo</li> <li class="woman">photo</li> <li class="woman">photo</li> <li class="woman">photo</

如何将最后一个
  • 的类从“女性”替换为“男性”

    我们最终应该得到:

    $list = '<ul>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    <li class="woman">photo</li>
    </ul>';
    
    $list=”
      照片 照片 照片 照片 照片 照片 照片 照片
    • 照片
    ';
    两个选项:

  • 使用正则表达式并根据需要制定正则表达式。例如,用不同的值替换最后一个li块类属性

    $list=preg#u replace('#^(.*
  • .*
  • *)$#s','$1man$3',$list)

  • 从片段生成DOM树,并使用xpath寻址最后一个li元素。(

  • 两种选择:

  • 使用正则表达式并根据需要制定正则表达式。例如,用不同的值替换最后一个li块类属性

    $list=preg#u replace('#^(.*
  • .*
  • *)$#s','$1man$3',$list);

  • 从片段生成DOM树,并使用xpath寻址最后一个li元素(

  • 尝试:

    我认为这是迄今为止最简单的方法,而且根本不需要regexp!

    试试:

    我认为这是迄今为止最简单的方法,而且根本不需要regexp!

    使用正则表达式(默认情况下是贪婪的),它非常简单:

    $off = strripos ( $list , "class=");
    $list = substr_replace ( $list , "man" , $off+7, 5);
    
    这不会考虑类可能位于LI标记以外的其他对象上,或者如果最后一个LI标记没有类。要修复第一个LI标记,只需更改正则表达式:

    $list = preg_replace ('#^(.*class=")woman(".*)$#s', '$1man$2', $list);
    
    $list=preg#u replace('#^(.*
  • (.*)$#s','$1
  • $2',$list);
  • 使用正则表达式(默认情况下是贪婪的),非常简单:

    $off = strripos ( $list , "class=");
    $list = substr_replace ( $list , "man" , $off+7, 5);
    
    这不会考虑类可能位于LI标记以外的其他对象上,或者如果最后一个LI标记没有类。要修复第一个LI标记,只需更改正则表达式:

    $list = preg_replace ('#^(.*class=")woman(".*)$#s', '$1man$2', $list);
    
    $list=preg#u replace('#^(.*
  • (.*)$#s','$1
  • $2',$list);
  • 找不到合适的副本,因此下面是DOM解决方案:

    $list = preg_replace ('#^(.*)<li[^>]*>(.*)$#s', '$1<li class="man">$2', $list);
    
    $list=”
      照片 照片 照片 照片 照片 照片 照片 照片 照片
    '; $dom=新的DOMDocument; $dom->preserveWhiteSpace=false; $dom->loadXml($list); $dom->documentElement->lastChild->setAttribute('class','man'); $dom->formatOutput=true; echo$dom->saveXml($dom->documentElement);


    如果您的标记不是XML兼容的,或者如果它是一个完整的HTML页面,请考虑使用 LoopHTML/COD>使用LIXML的HTML解析器模块。在这种情况下,在STACKOPPORE或通过我的答案进行搜索。有很多例子。

    找不到合适的副本,所以这里是DOM解决方案:

    $list = preg_replace ('#^(.*)<li[^>]*>(.*)$#s', '$1<li class="man">$2', $list);
    
    $list=”
      照片 照片 照片 照片 照片 照片 照片 照片 照片
    '; $dom=新的DOMDocument; $dom->preserveWhiteSpace=false; $dom->loadXml($list); $dom->documentElement->lastChild->setAttribute('class','man'); $dom->formatOutput=true; echo$dom->saveXml($dom->documentElement);


    如果您的标记不是XML兼容的,或者如果它是一个完整的HTML页面,请考虑使用 LoopHTML/COD>使用LIbXML的HTML解析器模块。在这种情况下,在STACKOPPORE中搜索或通过我的答案。有很多例子。

    您从哪里得到字符串?@鲁尼:是的,但是您自己生成它吗?您使用ReGEX(PREGGHORM)吗?或者仅使用PHP?为什么需要最后一个类不同?(相关)字符串从何处获得?@Rooney:是的,但您自己生成它吗?您是使用正则表达式(preg_match)还是仅使用PHP?为什么需要最后一个类不同?(相关)我不知道如何使用你给我的所有信息。你能给我一些代码的和平,这样我就可以接受你的答案吗?我为第一个选项添加了一个示例。第二个选项对于你的用例来说会有点臃肿。如果你碰巧在html内容中有更复杂的搜索/替换操作,这将是合适的方法。我我不知道如何使用你给我的所有信息。你能给我一些代码的和平,这样我就可以接受你的答案吗?我为第一个选项添加了一个示例。第二个选项对于你的用例来说会有点臃肿。如果你碰巧在html内容中有更复杂的搜索/替换操作,那么这将是合适的方法。你呢你在开玩笑吗?这不是一个解决方案。对不起,我意识到另一个版本是愚蠢的,但我仍然认为这是最好的解决方案。当旧的纯字符串操作是你所需要的时候,为什么要把regexp或DOM的东西复杂化呢?你在开玩笑吗?这不是一个解决方案。对不起,我意识到另一个版本是愚蠢的,但我仍然认为这是最好的解决方案最好的解决方案。当旧的普通字符串操作是您所需要的时,为什么要让regexp或DOM的东西变得复杂呢?