我需要基于“火与水”之类的短语来突出显示我的网站内容。我需要在短语<b>
周围完全存在的地方加上标签。并且,如果单词单独出现(不是完整的形式),则应该获得<b>
标签。例如,如果内容为:
世界由火,水和空气三个要素组成。火是热的,水是湿的。
结果应为:
世界是由三个元素组成的:“水与火”,“水”和“空气”。 `火``是热的`和````水``是湿的。
我尝试使用:
$output = preg_replace("/("fire and water)/i", '`<b>`$1`</b>`', $content);
$output = preg_replace("/(fire|and|water)/i", '`<b>`$1`</b>`', $ouput);
但是,当整个短语出现在内容中时,这会产生额外的(和不需要的)<b>
标签,从而导致如下结果:
` `fire` ```and` ```water` `
我知道这在屏幕上的显示不会和
``火与水``
但是,当搜索短语包含'/'时,会引起很大的问题。正则表达式中必须有一种方法可以突出显示完整的短语和单个单词,而不能一次执行。
答案 0 :(得分:3)
解决方案可能比您想象的简单得多:
$input = 'The world is made of three elements fire and water and air. Fire is hot and water is wet.';
$output = preg_replace("/(fire and water|fire|and|water)/i", '<b>$1</b>',$input);
echo $output;
输出为:
世界由三个元素组成火与水 和 空气。 火炎热而 水潮湿。
来源如下:
The world is made of three elements <b>fire and water</b> <b>and</b> air. <b>Fire</b> is hot <b>and</b> <b>water</b> is wet.
将按照元素的顺序对其进行处理。