[英]php code that uses regex to replace a search phrase or search terms with <b> match </b>
我需要根据“火和水”之类的短语突出显示我的网站内容。 我需要在短语的任何地方放置<b>
标签。 如果单词出现(不是完整的形式),他们应该得到<b>
标签。 例如,如果内容是:
世界由三个元素组成,包括火,水和空气。 火很热,水很湿。
结果应该是:
世界由三个元素组成:<b>`火和水`</ b>``<b>`和`</ b>`air。 `<b>`火``</ b>`很热`<b>`和`</ b>``<b>`water` </ b>`是湿的。
我试过用:
$output = preg_replace("/("fire and water)/i", '`<b>`$1`</b>`', $content);
$output = preg_replace("/(fire|and|water)/i", '`<b>`$1`</b>`', $ouput);
但是,当内容中出现完整短语导致结果如下时,这会产生额外(和不需要的) <b>
标记:
`<b> <b>`fire` </ b>``<b>`和`</ b>``<b>`water` </ b> </ b>
我知道这不会在屏幕上显示任何不同的
`<b>`火和水`</ b>`
但是,当搜索短语包含“/”时会导致大问题。 在正则表达式中必须有一种方法可以突出显示完整的短语和单个单词,而不必同时执行这两个单词。
解决方案可能比您想象的要简单得多:
$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.
元素按它们所在的顺序处理。
另请参阅: 在正则表达式中转义正斜杠
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.