有效地将正则表达式与字符串匹配

时间:2014-01-30 16:01:01

标签: regex string

通常,您有一个正则表达式和许多要处理的字符串。

我有相反的观点。我有一个字符串,我想找到匹配它的所有正则表达式。假设我有1000万个正则表达式。我不是要对字符串进行任何替换或重写,我只是想找到匹配的东西。

我想将它们存储在数据库中。一种粗略的方法是选择所有一千万行并迭代它们。对于每次迭代,应用正则表达式并以某种方式(我在这篇文章上有点不清楚)看看它是否匹配。也许我的正则表达式库有一个函数,我给它一个字符串和一个正则表达式,它告诉我它是否匹配。如果是,那么我打印出正则表达式。

这会很慢。我想知道我是否可以以某种方式将其移交给数据库,以便它只返回一个正则表达式的表格,该表格与给定字符串匹配,超出其1000万的表格。

我对使用的数据库不可知,我只是喜欢它很快。我不需要它快速成为“自定义汇编程序”,而只是“让数据库弄清楚它,所以我不必快速迭代1000万行”。

2 个答案:

答案 0 :(得分:1)

  

我想知道我是否能以某种方式将其移交给数据库,以便它只返回一个与给定字符串匹配的正则表达式表

至少mysql可以这样做:

SELECT regex FROM table_with_regexes WHERE
      regex REGEXP someString;

如果您告诉我们更多有关您实际问题的信息,也会有所帮助。我不认为你手工写了一千万个正则表达式,它们必须是自动生成的 - 告诉我们如何。

答案 1 :(得分:0)

在您的情况下,我将分三步处理:

第1步:找到第一个SQL查询

构建一个sql查询,搜索匹配我的字符串的正则表达式 我将从一个用于构建sql查询的小型正则表集开始。

第2步:如果需要,请进行优化

添加更多正则表达式并查看sql查询的执行方式 我会优化,必要时重写它。

第3步:使用选择的数据库优化工具

我会简单地调整我的SQL查询以尽快回复 我会使用sql引擎,索引,并行执行等提示

将所有辛勤工作交给数据库是一种很好的方法,因为IMO是一种优雅而明确的方法。