在阳性/阴性词之前查找Php单词


Php finding word before a positive/negative word

我有一个数据库,里面有3个表,用于电影评论的评论、pos和neg单词,我试图检测单词"not"是否出现在阳性或阴性单词之前,如果它出现在neg单词之前,则在pos计数上加1,也就是说,这还不错,如果它在pos单词之前,即,这不好

目前我有这种方法,但它似乎只检测一次单词前的单词,我如何才能通过全文进行检测

$find = $review_text;
if (preg_match("/(?<=not) $negwords/i", $find)) 
{
echo $good++;
}
if (preg_match("/(?<=not) $poswords/i", $find)) 
{
echo $bad++;
}

假设:

$negwords = array("bad","aweful");

如果你想检查前面是否有否定词,你需要在查询中使用替代词:

$words  = '(' + implode('|', $negwords) + ')'; // $words now contains (bad|aweful)
if(preg_match("/(?<=not) $words/i",$find)) {
     echo "match found!";
}

注意$negwords不能包含任何regexp特殊字符!(如.*?等)-如果需要,请使用preg_quote

要了解有多少匹配,可以使用preg_match_all返回匹配数。

http://nl3.php.net/manual/en/function.preg-match-all.php

The Guy Of Doom展示了一个聪明的解决方案,可以用一个正则表达式检查整个文本,而不必在单词列表上循环并对每个单词进行一次搜索。然而,您询问的问题是,PHP中的regexp默认只查找第一个匹配项。正如他所提到的,为此你需要preg_match_all()。只需这样做:

preg_match_all("/(?<=not) $poswords/i", $find, $results);

CCD_ 4不需要预先定义。调用该函数后,PHP会将regexp的结果作为数组数组放入变量$results中。第一个数组将包含您想要的内容:每次找到匹配项时匹配的完整字符串(其他数组包含与捕获的组对应的字符串部分,即括号中的表达式部分)。

在某些语言中,您可以使用g运算符来获取所有匹配项(将不区分大小写的运算符i放在同一个位置),但在PHP中就是这样做的。