2012-02-18 38 views
11

具體的話我想從一個字符串中去除整個單詞,無論他們是裏面的字符串。地帶從字符串

我已創建的禁止單詞的數組:

$wordlist = array("or", "and", "where", ...) 

現在我剝離的話:

foreach($wordlist as $word) 
$string = str_replace($word, "", $string); 

的問題是,在上面的代碼還條包含像禁單詞「沙子「或」更多「。

+2

人提示:str_replace可以接受一個數組,所以你可以'str_replace($ wordlist,'',$ string)''。 – cmbuckley 2012-02-18 14:51:57

回答

17

爲此,您可以使用preg_replace和單詞邊界:

$wordlist = array("or", "and", "where"); 

foreach ($wordlist as &$word) { 
    $word = '/\b' . preg_quote($word, '/') . '\b/'; 
} 

$string = preg_replace($wordlist, '', $string); 

編輯Example

1

TRY:

$string = preg_replace("\b$word\b", "", $string); 
+0

這這麼想的似乎是工作..扔「分隔符不能是字母,數字或反斜線」 – 2016-09-13 18:24:58

4

的str_replace函數還支持陣列的輸入端。這意味着您可以通過以下方式使用它:

str_replace(array("word1", "word2"), "", $string); 

這意味着所有現存的數組中的話會被空字符串替換。如果你想要特定的替換,你也可以創建一個替換數組。

要刪除正確的話在你的設置我會建議添加空格圍繞「或」和「地方」。因爲你只會刪除真實的單詞而不是單詞的一部分。

我希望這會有所幫助。

+0

的空間的想法很簡單,並可能在這種情況下給出的單詞工作被替換,但在總體上可能會出現問題在字符串的開頭和結尾。 – cmbuckley 2012-02-18 14:53:46

+1

但這不是解決給出的問題:'還剔除含有被禁止的話,如「沙」或「多」 .' – 2012-02-18 15:04:59

+2

@NomikOS閱讀後的第二個半字。 – cmbuckley 2012-02-18 15:07:57

0
$areaname = str_replace(array("to", "the","a","an","in","by","but","are","is","had","have","has"),'',$areaname); 

我用了這一點,並能正常工作

但它會代替這些詞添加空格,所以你需要使用再次更換,以清潔香港雙重空間,並刪除他們