Php 使用preg“u替换为”;更新;搜索字符串

Php 使用preg“u替换为”;更新;搜索字符串,php,regex,preg-replace,Php,Regex,Preg Replace,所以我有这个字符串: $str='<li>Smartphone: Da</li> <li>Touchscreen: Da</li> <li>Tastatura QWERTY: Nu</li> <li>Tip tastatura: Standard</li> <li>Rezolutie senzor (Mp): 5</li>

所以我有这个字符串:

$str='<li>Smartphone: Da</li>
      <li>Touchscreen: Da</li>
      <li>Tastatura QWERTY: Nu</li>
      <li>Tip tastatura: Standard</li>
      <li>Rezolutie senzor (Mp): 5</li>
      <li>SAR (W/kg ): 1.17</li>';
智能手机:Da
  • 触摸屏:Da
  • Tastatura QWERTY:Nu
  • 提示:标准
  • 雷佐鲁蒂·森佐(议员):5
  • SAR(W/kg):1.17; 我想做的是在li标记和“:”字符之间添加一些“强”标记。我尝试使用以下命令将所有通缉的单词排列成一个数组:

         preg_match_all('/<li>(.*?):/', $str, $matches);
    
    preg_match_all('/
  • (.*?:/'),$str,$matches);
  • 然后试图从那里改变他们,但这对我没有多大帮助。所以现在我尝试使用preg_replace,但我不想给出一个替换词作为参数,因为它在不同的li中是不同的。换句话说,我想做这样的事情:

        preg_replace('/<li>(.*?):/',"<strong>'/<li>(.*?):/'</strong>",$str); 
    
    preg_替换('/
  • (.*?:/”,“”/
  • (.*?:/”,$str);
  • 因此,我想搜索li标记和“:”之间的文本,然后在前后放置强标记,以使其变为粗体


    如果我的解释不好,很抱歉,但我对正则表达式相当陌生,而且不太懂词汇。提前感谢。

    虽然您应该避免像这样解析和操作HTML,但是如果您知道使用regex解析HTML的所有问题,并且仍然希望使用regex:

    preg_replace('/(?<=<li>)(.+?)(?=:)/', '<strong>$1</strong>', $str);
    

    preg_replace('/(?
    $str=preg_replace('/(?您要查找的替换表达式是:

    preg_replace('/<li>([^:]*):/','<li><strong>\1</strong>:',$str); 
    
    preg_替换('/
  • ([^:]*):/','
  • \1:',$str);

  • [^::]*
    部分匹配所有非“:”的字符(否则正则表达式将是“贪婪的”,请参见:)。该\1部分将把所选(请参见“()”)部分插入到表达式中。

    /]*>\K[^这似乎没有替换$str中的任何内容,尽管您的表达式似乎与我想要的匹配。我缺少了什么?+1::@DragosBecsan-即使这个答案没有优化或完美,它也可以工作-检查并尝试了这个选项,我仍然看不到$str中的任何更改。知道我缺少了什么吗?preg_replace将返回结果,因此您必须使用ii don’我不喜欢这样:
    $str=preg_replace(…,$str);
    你是这样用的吗?愚蠢的我……很抱歉这样浪费你的时间,我在这件事上忙了好几个小时,现在我忘记了一些小事情。图片:很有效,非常感谢。取消删除,因为你似乎对其他答案有问题。谢谢
    /<li\b[^>]*>\K[^<:]+(?=:)/i
    
    preg_replace('/<li>([^:]*):/','<li><strong>\1</strong>:',$str); 
    
    /<li\b[^>]*>\K[^<:]+(?=:)/i
    
    preg_replace('/<li\b[^>]*>\K[^<:]+(?=:)/i', '<strong>$0</strong>', $str);