最近我一直在寻找可以检测连接到我的webapp的用户代理是一个爬虫的正则表达式。
有许多抓取工具,如google,yahoo,bing,facebook和许多其他人,他们在User-Agent标题中做广告。所以基本上我认为可以编译一个reglexp来尝试匹配给定字符串中的任何这些子字符串。它可以像google | yahoo | bing | facebook这样的regexp轻松匹配,但是如果给定字符串的列表足够大并且其中许多具有相似的前缀或后缀,则可能编译更高效的正则表达式。 (出于这个目的,有一些人类编译器正则表达式浮在internetz上)。
那么,是否存在可以在这样的情况下使用的工具或算法,在给定单词列表的情况下,返回正则表达式,该正则表达式将确定输入字符串中是否有任何单词匹配?
P.S。 我被提醒了这一点,因为今天在ycombinator http://regex.inginf.units.it/上使用遗传算法解决了非常相似的问题。似乎在一般情况下它可能是NP难题,但如果它适用于20-30个单词的简单列表,它仍然是有用的。
答案 0 :(得分:0)
fgrep中使用的Aho-Corasick string matching algorithm几乎就是这样,尽管它构建了一个内部数据结构来进行匹配而不是生成正则表达式。在维基百科上有链接到那里的C,Python等实现,因此您可以将它包含在您的爬虫中。您将编译一次数据结构,并使用编译版本来测试每个用户代理。