Php 搜索匹配词而不出现误报

Php 搜索匹配词而不出现误报,php,arrays,regex,Php,Arrays,Regex,我找到了这个链接,现在正在处理它,但是我需要进一步扩展它。 我试图创建一个脚本,检查已知的坏字网页。我有一个数组,其中有一个坏单词列表,它将它与文件\u get\u contents中的字符串进行比较 这在基本层面上起作用,但会返回误报。例如,如果我加载一个带有“title”一词的网页,它返回找到“tit”一词的结果 我的最佳选择是剥离所有html和标点符号,然后根据空格将其分解,并将每个单词放入一个数组中吗?我希望有一个比这更有效的过程 以下是我目前的代码: $url = 'http://s

我找到了这个链接,现在正在处理它,但是我需要进一步扩展它。

我试图创建一个脚本,检查已知的坏字网页。我有一个数组,其中有一个坏单词列表,它将它与文件\u get\u 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);

提前谢谢

您可以将正则表达式与以下内容一起使用:

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


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

中,如果您能再帮我一个忙的话。您发布的第一个代码仍然返回假阳性,但您的更新修复了它。你能解释一下\b的作用吗?就我的一生而言,我不能把我的头缠在正则表达式上。@DeveloperGee:正如我在回答中提到的,
\b
在单词边界处断言位置;基本上是介于单词字符(字母、数字等)和非单词字符(其他所有字符)之间的任意位置。有关详细信息,请参阅
$badwords = 'tit,butt,etc'; 
$regex = sprintf('/\b(%s)\b/', implode('|', explode(',', $badwords)));

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