正则表达式发生器/减速器?

Joe*_*Joe 17 regex algorithm

我提出从我们目前的业务痛点同事一个有趣的问题,并很好奇,如果有什么事,在那里(工具/库/算法),这可能有助于自动执行此.

假设您有一个文字值列表(在我们的例子中,它们是URL).我们想要做的是,根据这个列表,提出一个匹配所有这些文字项的正则表达式.

所以,如果我的列表是:

http://www.example.com
http://www.example.com/subdir
http://foo.example.com
Run Code Online (Sandbox Code Playgroud)

最简单的答案是

^(http://www.example.com|http://www.example.com/subdir|http://foo.example.com)$
Run Code Online (Sandbox Code Playgroud)

但是这对于大量数据而言变得很大,而且我们有一个长度限制,我们试图保持不变.

目前我们手动编写正则表达式,但这不能很好地扩展,也不是很好地利用任何人的时间.有没有分解源数据拿出匹配所有的源值的长度最佳的正则表达式的更自动化的方式?

Raf*_*ird 15

阿霍- Corasick匹配算法构造一个有限自动机以匹配多个字符串.您可以将自动机转换为其等效的正则表达式,但直接使用自动机更简单(这就是算法所做的.)


Eri*_*ric 8

正则表达式的自动生成,请点击这里.该工具具有Web界面,并使用遗传编程从一组示例生成正则表达式:您可以选择为Java或JavaScript正则表达式引擎准备的语法.它由我们的研究小组开发,并已在GECCO 2012会议上发布.


ESL*_*ESL 6

今天我在搜索.我没找到它,所以我创建了一个工具:kemio.com.ar/tools/lst-trie-re.php

你在右侧放置一个列表,提交它,然后在左侧获得正则表达式.

我尝试了一个6Kb的单词列表,并产生了一个4Kb的正则表达式(我把它放在JS文件中),如: var re=new RegExp(/..../,"mib");

请不要滥用它.