同事向我提出了一个有趣的问题,询问我们目前存在的操作难题,并且很好奇是否有任何东西(实用程序/库/算法)可以帮助实现此目的。
假设您有一个文字值列表(在我们的例子中,它们是URL)。根据此列表,我们要做的是提供一个匹配所有这些文字项的正则表达式。
所以,如果我的清单是:
http://www.example.com http://www.example.com/subdir http://foo.example.com
最简单的答案是
^(http://www.example.com|http://www.example.com/subdir|http://foo.example.com)$
但这对于大量数据而言会变得很大,并且我们试图限制其长度。
目前,我们手动编写正则表达式,但这伸缩性不是很好,也不是任何人花费时间的好方法。是否有一种更自动化的方法来分解源数据,以提供与所有源值匹配的长度最佳的正则表达式?
的阿霍- Corasick匹配算法构建一个有限自动机以匹配多个字符串。您可以将自动机转换为其等效的正则表达式,但是直接使用自动机更简单(这是算法的作用。)