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