2012-04-27 97 views
2

我希望能够搜索字符串中的某个单词,并将字符添加并预先添加到该单词的每个实例。追加并将文本前缀添加到字符串

例如:

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

你的意思是你想要像'str_wrap(needle,prefix,suffix,haystack)'这样的函数调用吗? (顺便说一句,虽然可能有一个叫做str_wrap的函数,但我并不是说这是调用它的格式,也不是函数的意图)。你能告诉我们为什么你厌恶“猫”两次? – 2012-04-27 15:28:20

+2

把它放在一个变量里面?你将不得不写两次变量名,但它不一样。 – Jon 2012-04-27 15:29:35

回答

6

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

preg_replace("/cats/smi","($0)",$string); 
+0

完美!正是我在找的!谢谢! – 2012-04-27 15:36:51

+0

@williammalo,你能告诉我们为什么你不想两次写“猫”吗?只是好奇。 – 2012-04-27 15:38:02

+0

@williammalo,请注意,使用正则表达式而不是简单的'str_replace()'在cpu上花费相当多。 – 2012-04-27 15:41:09

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

preg_replace documentation转述:

替换字符串可能包含形式$n的引用。每个这样的参考将被第n个括号内的模式所捕获的文本所取代。 $0指的是整个图案匹配的文字。

1

你的评论:

我有我需要加上括号值的一个巨大的纯文本列表,我 想拍编写代码更容易。

因为你要通过包装str_replace()做很多的替代品(昂贵的CPU明智),而你想简单地缩短您的编码时间,何不也节省CPU?

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

PHP manual

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

+0

啊完美!使用功能的好主意! – 2012-04-27 18:00:17