用标记环绕文本 - PHP

时间:2016-02-03 19:42:59

标签: php regex preg-replace

我尝试使用正则表达式在php中执行以下操作。

示例字符串:"懒狗吠叫。懒惰的疯狗。"

我想将其更改为:

"the <tag>lazy</tag> dog barked. <tag>Lazy</tag> crazy dog."

所以我想围绕Lazy的每个实例,不管用什么情况

我知道你可以使用像&#34; / \ blazy \ b / i&#34;这样的正则表达式。选择懒惰。

对于我的生活,我们无法弄清楚如何使用preg_replace来代替单词而不管标签所包含的相同单词的大小写。

对此表示感谢。

2 个答案:

答案 0 :(得分:0)

您可以在此实例中使用preg_replace_callback http://php.net/manual/en/function.preg-replace-callback.php

$string = "the lazy dog barked. Lazy crazy dog.";

$result = preg_replace_callback('/lazy/i', function ($item) {
     return '<tag>' . $item[0] . '</tag>';
}, $string);

echo $result;

答案 1 :(得分:0)

带分组的preg_replace应该能够做到这一点:

$string = "the lazy dog barked. Lazy crazy dog.";
echo preg_replace('/\b(lazy)\b/i', '<tag>$1</tag>', $string);

输出:

the <tag>lazy</tag> dog barked. <tag>Lazy</tag> crazy dog.

如果您想要替换多个术语,请在每个术语之间使用或(|)。

例如:

echo preg_replace('/\b(lazy|tired)\b/i', '<tag>$1</tag>', $string);

这会将lazytired放在tag个元素中。

Regex101演示:https://regex101.com/r/hT6xR5/1
PHP演示:https://eval.in/512715