正则表达式用于异常检测单词的出现

时间:2018-08-25 06:41:47

标签: php regex

如何在某些带有例外的关键字之前检测文本。

例如。我有这样一句话:“糖,鸡蛋,牛奶,不含麸质”

我们有一个包含“面筋,牛奶”的数组,如果出现任何这些单词,请警告我。

结果假定只是牛奶,因为在本例中我不含麸质,这意味着它不含麸质。

我需要一个正则表达式来检测单词的出现,除了它前面有“ 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();
  }

1 个答案:

答案 0 :(得分:1)

此正则表达式可能会有所帮助:

/(?<!free of )\b(?:gluten|milk)\b(?! free)/gi

Demo

说明:

最重要的位是开始的后向和结束的前向。他们断言在\b(?:gluten|milk)\b之前不能有free of,在\b(?:gluten|milk)\b之后一定不能free。如果确实没有这些单词,则我们匹配一些单词边界,然后匹配glutenmilk

如果您将关键字存储在变量中,则需要用|分隔每个关键字,并且需要转义,以防万一它们中包含特殊含义的字符正则表达式。逃避它们的一种方法是用\Q\E包围每个单词(而不是整个非捕捉组!)。