使用preg_replace“更新”搜索的字符串

时间:2013-11-17 15:03:04

标签: 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>
      <li>SAR (W/kg ): 1.17</li>';

我想要做的是在li标签和':'字符之间的单词中添加一些“强”标签。我尝试在数组中获取所有想要的单词:

     preg_match_all('/<li>(.*?):/', $str, $matches);

然后尝试从那里转换它们,但它对我没那么帮助。所以现在我正在尝试使用preg_replace但我不想给替换单词作为参数,因为它不同于一个li。换句话说,我想做这样的事情:

    preg_replace('/<li>(.*?):/',"<strong>'/<li>(.*?):/'</strong>",$str); 

所以我想在li标签和':'之间搜索文本,然后在前后放置强标签,以使其变为粗体。

很抱歉,如果我的解释很糟糕,但我对正则表达式相当新,并且不太了解词汇量。提前谢谢。

4 个答案:

答案 0 :(得分:2)

/<li\b[^>]*>\K[^<:]+(?=:)/i

Regular expression visualization

Debuggex Demo


preg_replace('/<li\b[^>]*>\K[^<:]+(?=:)/i', '<strong>$0</strong>', $str);

<强> PHP Demo

答案 1 :(得分:1)

虽然你应该避免解析&amp;像这样操纵HTML但是如果你知道使用正则表达式进行HTML解析的所有问题并且仍然想要使用正则表达式:

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

答案 2 :(得分:0)

$str = preg_replace('/(?<=<li>)([^:]*)/', '<strong>$1</strong>', $str);
print_r($str);

<强>输出:

<li><strong>Smartphone</strong>: Da</li>
<li><strong>Touchscreen</strong>: Da</li>
<li><strong>Tastatura QWERTY</strong>: Nu</li>
<li><strong>Tip tastatura</strong>: Standard</li>
<li><strong>Rezolutie senzor (Mp)</strong>: 5</li>
<li><strong>SAR (W/kg )</strong>: 1.17</li>

答案 3 :(得分:-1)

您正在寻找的替代表达是:

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

[^:]*部分匹配所有不是“:”的字符(否则正则表达式将是“贪婪的”,请参阅:http://www.regular-expressions.info/repeat.html#greedy)。 \ 1部分将选定的(参见“()”)部分插回表达式。