我希望能够在字符串中搜索某个单词,并将字符附加到该单词的每个实例中。
例子:
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 );
但我必须写两次“猫”。我想要一个只需要我写一次的方法。
$search = 'cats';
preg_replace('/' . preg_quote($search, '/') . '/', '($0)', $string);
从preg_replace
文档中解释:
替换字符串可能包含表单的引用
$n
。每个这样的引用都将被第 n 个带括号的模式捕获的文本替换。$0
指整个模式匹配的文本。
使用preg_replace()
带有反向引用: http: //php.net/manual/en/function.preg-replace.php
preg_replace("/cats/smi","($0)",$string);
你评论说:
我有一个巨大的纯文本值列表,我需要用括号括起来,我想让编写代码更容易。
既然您将要进行许多替换(昂贵的 cpu 方面),并且您只想缩短编码时间,为什么不通过 wrapping 来节省 CPUstr_replace()
呢?
function str_wrap($needle,$prefix,$suffix,$haystack) {
return str_replace($needle, $prefix . $needle . $suffix, $haystack);
}
根据PHP 手册:
如果你不需要花哨的替换规则(比如正则表达式),你应该总是使用 [str_replace()] 而不是 preg_replace()。