2012-04-27 101 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