1

我正在尝试创建一个相当简单的正则表达式,以与 preg_match() 一起使用,用于检查用户代理字符串是否有可能的网络爬虫/蜘蛛。

例如,现在我正在使用类似的东西:

preg_match("/(bot|search|web|slurp|crawl)/i")

这似乎成功地匹配了包含“googlebot”或“webcrawler”之类的用户代理。

但是,我遇到的问题是,当用户代理包含像“webkit”这样常见的东西时,这也匹配。

需要进行哪些修改以防止匹配“webkit”等特定单词?我对正则表达式知之甚少,并且花了几个小时根据对其他问题的答案尝试各种组合,但到目前为止还没有成功。

提前谢谢了 :)

4

1 回答 1

0

为了排除某个单词列表,您可以组合两个前瞻:

(?!webkit|robot)(?=bot|search|web|slurp|crawl)

显然第一部分将是您的排除列表。这将匹配“ web ”但不匹配“ webkit

关于语法的一个小注释。(?!regex) 是负前瞻, (?=regex) 是正前瞻(非消耗正则表达式)。你可以在这里阅读更多内容。简而言之,前瞻意味着“匹配正则表达式 expr,但之后在原始匹配点继续匹配”。

于 2013-08-26T02:01:29.583 回答