0

文字列をスキャンして、単語のブラックリストと照合しようとしています。以前preg_quoteはアスタリスクなどの特殊文字を処理していましたが、ドル記号では機能しないようです。

これが私が実行しているテストです:

$string_to_check = 'wordcontaining$';
$naughty_words = array('wordcontaining$', 'a*differentstring');
if(isset($naughty_words)){
    foreach($naughty_words as $word){
        if (preg_match('/\b'.preg_quote($word).'\b/i',$string_to_check)) {
            var_export(array('found'=> true, 'word'=>$word));
        }
    }
}

私が返すことを期待するもの

array (
    'found' => true,
    'word' => 'wordcontaining$',
)

しかし残念ながらそうではありません。設定すると$string_to_check = 'a*differentstring'、すべてが期待どおりに機能します。

ここで非常に明白な何かを見逃しましたか?

4

3 に答える 3

0

\bしたがって、上記の私のコメントに従って、正規表現から2 番目のエクストラを削除する必要があります。

デモ。

于 2013-05-07T16:22:10.523 に答える
0

パターンを自動的に区切り、安全でない文字を処理するT-Regx ライブラリを使用することもできます。

if (Pattern::prepare(['\s*+', [$word], '\s*+'], 'i')->test($string_to_check)) {

PS:Pattern.test()リターンtrue/false

于 2019-05-23T11:05:16.720 に答える