我需要在文本中实现多个扩展字符串匹配的算法。
扩展表示存在通配符(任意数量的字符而非星号),例如:
abc*def //matches abcdef, abcpppppdef etc.
多个表示搜索同时进行多个字符串模式(不是对每个模式进行单独搜索),例如:
abc*def
abc
whatever
some*string
问题:
什么是可以进行多个扩展字符串匹配的快速算法?
优选地,针对SIMD指令和多核实现进行了优化。开源实现(C / C ++ / Python)也很棒。
谢谢
答案 0 :(得分:2)
我认为从阅读以下维基百科文章的部分开始是有意义的:http://en.wikipedia.org/wiki/Regular_expression#Implementations_and_running_times。然后,您可以对算法进行文献综述,实现正则表达式模式匹配。
在实际的实现方面,有一大堆图书馆形式的正则表达式(正则表达式)引擎,专注于一种或多种编程语言。最有可能的是,最好和最受欢迎的选项是C / C ++ PCRE library,其最新版本PCRE2于2015年发布。另一个在Google上非常流行的C ++正则表达式库是RE2。我建议您阅读this paper以及文章中链接的另外两篇文章,了解有关算法,实施和基准的详细信息。就在最近,谷歌发布了RE2/J - RE2 for Java的线性时间版本:有关详细信息,请参阅this blog post。最后,我遇到了一个有趣的纯C正则表达式库TRE,它提供了很多很酷的功能,可以在这里列出。但是,您可以在this page上阅读所有相关内容。
P.S。如果以上内容对您来说不够,请随时访问this Wikipedia page以获取更多正则表达式引擎/库的详细信息以及它们在多个条件下的比较。希望我的回答有所帮助。