3

我希望能够在字符串中搜索某个单词,并将字符附加到该单词的每个实例中。

例子:

I like cats, cats are awesome! I wish I had cats!

变成:

I like (cats), (cats) are awesome! I wish I had (cats)!

我知道我可以使用

str_replace( 'cats', '(cats)', $string );

但我必须写两次“猫”。我想要一个只需要我写一次的方法。

4

3 回答 3

8
$search = 'cats';
preg_replace('/' . preg_quote($search, '/') . '/', '($0)', $string);

preg_replace文档中解释:

替换字符串可能包含表单的引用$n。每个这样的引用都将被第 n 个带括号的模式捕获的文本替换。$0指整个模式匹配的文本。

于 2012-04-27T15:27:54.107 回答
6

使用preg_replace()带有反向引用: http: //php.net/manual/en/function.preg-replace.php

preg_replace("/cats/smi","($0)",$string);
于 2012-04-27T15:28:44.810 回答
1

你评论说:

我有一个巨大的纯文本值列表,我需要用括号括起来,我想让编写代码更容易。

既然您将要进行许多替换(昂贵的 cpu 方面),并且您只想缩短编码时间,为什么不通过 wrapping 来节省 CPUstr_replace()呢?

function str_wrap($needle,$prefix,$suffix,$haystack) {
    return str_replace($needle, $prefix . $needle . $suffix, $haystack);
}

根据PHP 手册

如果你不需要花哨的替换规则(比如正则表达式),你应该总是使用 [str_replace()] 而不是 preg_replace()。

于 2012-04-27T16:03:17.997 回答