匹配单词列表与句子

时间:2010-11-16 05:32:24

标签: php

我有一个包含大约450个单词的“坏”单词列表。

我正试图用

检查句子
<?php
$sentence = "A quick brown fox jumps over the lazy dog";
foreach($words as $word) {
    $check  =   strstr($sentence,$word);
    if(!empty($check))
        return false;        
}
return true;
?>

对此有更快更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用preg_splitarray_intersect

<?php
$sentence = "A quick brown fox jumps over the lazy dog";
$sntce_wrds = preg_split('/\s+/', $sentence);
return count(array_intersect($sntnce_words, $words)) > 0;

答案 1 :(得分:0)

我认为preg_replace也应该符合您的需求。传递$ words数组作为替换模式和空格。然后将结果与原始字符串匹配。例如

$newStr = preg_replace($words, '', $sentence);

if($newStr !== $sentence)
    return false;

return true;

请知道这是否有帮助。

编辑:正如仍然指出的那样,$ words数组中的单词需要是有效的正则表达式。因此,只有将单词更改为“/”/“/”。

之类的模式时,此方法才有效

编辑-2:如果由于某种原因想要保留单词数组,请使用

$wordArr = preg_replace("/(.*)/", '/\1', $words);

将所有单词转换为有效的正则表达式。我认为即使有这个开销,它也应该比很长的列表中的strstr更快。