2012-02-18 18 views
11

文字列の中のどこにあっても、文字列から単語全体を取り除きたい。今、私は言葉を取り除く文字列から特定の単語を取り除く

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

は私が禁じられた単語の配列を作成している

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

問題は、上記のコードはまた、 "のような禁じられた単語を含む単語をストリップということです砂 "または"より多くの "。このため

+2

Proのチップを削除するために再び置き換える使用する必要があります:str_replaceは配列をとることができるので、 'str_replace($ wordlist、 ''、$ string)'を実行するだけです。 – cmbuckley

答えて

17

あなたはpreg_replaceと単語の境界を使用することができます。

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

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

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

EDITExample

1

TRY:

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

これはうまく動作していないようです。「区切り文字は英数字またはバックスラッシュであってはいけません。」 –

4

str_replaceはまた、アレイの入力をサポートします。これは、アレイ内の既存のすべての単語は、空の文字列に置き換えられることを意味

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

:これは、あなたが次のようにそれを使用することができることを意味します。特定の置換が必要な場合は、置換配列を作成することもできます。

セットアップで正しい単語を削除するには、「or」と「where」の周りにスペースを追加することをお勧めします。実際の単語だけを削除し、単語の部分は削除しません。

こちらがお役に立てば幸いです。

+0

スペースのアイデアは単純なものであり、この場合はスペースを入れ替えても問題はありませんが、文字列の始めと終わりに。 – cmbuckley

+1

しかし、これは与えられた問題を解決しません: '' sand "や" more "のような禁じられた言葉を含む言葉も取り除きます。 –

+2

@NomikOSは投稿の後半を読んでいます。 – cmbuckley

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

は、私はこのためにそれを使用し、細かい

動作しますが、それはこれらの言葉の代わりにスペースを追加しますので、あなたは二重の空白をCHKし、それらに

関連する問題