如何在某些带有例外的关键字之前检测文本。
例如。我有这样一句话:“糖,鸡蛋,牛奶,不含麸质”
我们有一个包含“面筋,牛奶”的数组,如果出现任何这些单词,请警告我。
结果假定只是牛奶,因为在本例中我不含麸质,这意味着它不含麸质。
我需要一个正则表达式来检测单词的出现,除了它前面有“ free”或“ free”之外。
编辑: 这是我在做什么
$userIp = $_SERVER['REMOTE_ADDR'];
$checkIp = $db->prepare("SELECT user_ip FROM user_ip WHERE word_id = '$idToShow'");
$checkIp->execute();
//This happens
if (count($checkIp) > 0) {
echo count($checkIp);
echo " ". $idToShow;
}
//instead of this
else {
$insertIP = $db->prepare("INSERT INTO user_ip (user_ip, word_id) values('$userIp', '$idToShow')");
$insertIP->execute();
$updateView = $db->prepare("UPDATE words set views = views + 1 WHERE id = '$idToShow'");
$updateView->execute();
}
答案 0 :(得分:1)
此正则表达式可能会有所帮助:
/(?<!free of )\b(?:gluten|milk)\b(?! free)/gi
说明:
最重要的位是开始的后向和结束的前向。他们断言在\b(?:gluten|milk)\b
之前不能有free of
,在\b(?:gluten|milk)\b
之后一定不能free
。如果确实没有这些单词,则我们匹配一些单词边界,然后匹配gluten
或milk
。
如果您将关键字存储在变量中,则需要用|
分隔每个关键字,并且需要转义,以防万一它们中包含特殊含义的字符正则表达式。逃避它们的一种方法是用\Q
和\E
包围每个单词(而不是整个非捕捉组!)。