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