搜索没有错误positivis的匹配单词

时间:2014-11-03 19:05:46

标签: php arrays regex

我找到了这个链接并正在解决它,但我需要进一步扩展它。 Check if string contains word in array

我正在尝试创建一个脚本来检查网页上是否存在已知的错误字词。我有一个包含坏词列表的数组,并将它与file_get_contents中的字符串进行比较。

这适用于基本级别,但会返回误报。例如,如果我正在加载一个网页,其中包含" title"它返回它找到了单词" tit"。

我最好的办法是删除所有的html和标点符号,然后根据空格将其爆炸并将每个单词放入数组中?我希望有一个更有效的过程。

到目前为止,这是我的代码:

$url = 'http://somewebsite.com/';
$content = strip_tags(file_get_contents($url));

//list of bad words separated by commas
$badwords = 'tit,butt,etc'; //this will eventually come from a db
$badwordList = explode(',', $badwords);

foreach($badwordList as $bad) {
    $place = strpos($content, $bad);
    if (!empty($place)) {
        $foundWords[] = $bad;
    }
}

print_r($foundWords);

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以使用preg_match_all()的正则表达式:

$badwords = 'tit,butt,etc'; 
$regex = sprintf('/\b(%s)\b/', implode('|', explode(',', $badwords)));

if (preg_match_all($regex, $content, $matches)) {
    print_r($matches[1]);
}

第二个语句创建了我们用来匹配的正则表达式并从网页上捕获所需的单词。首先,它将逗号分隔$badwords字符串,并将其与|连接起来。然后将生成的字符串用作如下模式:/\b(tits|butt|etc)\b/\b(这是一个单词边界)将确保只匹配整个单词。

此正则表达式模式将匹配任何这些单词,并且网页中的单词将存储在数组$matches[1]中。