1

最近我正在寻找一个正则表达式,它可以检测连接到我的 web 应用程序的用户代理是一个爬虫。

有许多爬虫,如 google、yahoo、bing、facebook 和许多其他爬虫,它们在 User-Agent 标头中宣传自己。所以基本上我认为可以编译一个正则表达式来尝试匹配给定字符串中的任何这些子字符串。它可以与 google|yahoo|bing|facebook 之类的正则表达式进行简单匹配,但如果给定字符串的列表足够大并且其中许多具有相似的前缀或后缀,则可能编译出更有效的正则表达式。(为了这个确切的目的,internetz 上漂浮着人类编译器正则表达式)。

那么,是否有一种工具或算法可以在这种情况下使用,给定一个单词列表,返回一个正则表达式,以确定输入字符串中是否有任何单词匹配?

PS 我想起了这一点,因为今天在 ycombinator http://regex.inginf.units.it/上发布了非常相似的内容,这是使用遗传算法的求解器。似乎在一般情况下,它可能是 NP 难题,但如果它适用于 20-30 个单词的简单列表,它仍然很有用。

4

1 回答 1

0

fgrep 中使用的Aho-Corasick 字符串匹配算法 几乎完全做到了这一点,尽管它构建了一个内部数据结构来进行匹配而不是生成一个正则表达式。在链接到那里的维基百科页面上有 C、Python 等的实现,因此您可以将其包含在您的爬虫中。您将编译一次数据结构,并使用编译后的版本来测试每个用户代理。

于 2012-10-22T13:26:51.907 回答