【发布时间】:2014-01-31 19:33:18
【问题描述】:
通常,您需要处理一个正则表达式和大量字符串。
我的观点正好相反。我有一个字符串,我想找到所有匹配它的正则表达式。假设我有 1000 万个正则表达式。我不想对字符串进行任何替换或重写,我只是想找到匹配的东西。
我想将这些存储在数据库中。一种粗略的方法是选择所有一千万行并遍历它们。对于每次迭代,应用正则表达式并以某种方式(我对这篇文章也有点不清楚)看看它是否匹配。也许我的正则表达式库有一个函数,我给它一个字符串和一个正则表达式,它会告诉我它是否匹配。如果是这样,那么我打印出正则表达式。
这会很慢。我想知道我是否可以以某种方式将其交给数据库,以便它只返回一个与给定字符串匹配的正则表达式表,从它的 1000 万个表中。
我不知道所使用的数据库,我只是希望它快一点。我不需要它是快速的“自定义汇编器”,而只是“让数据库解决它,这样我就不必在 1000 万行上迭代”快速。
【问题讨论】:
-
1.为什么? 2. 可以解释为简单字符串的正则表达式的数量没有限制。
foobar可以与/.*/、/.*.*/、/.*.*.*/、/.*.*.*.*/...匹配。 -
不,您肯定需要查看每一个正则表达式(迭代所有 1e7 行)。但是,如果它们形成某种您能够检测到的模式,您可能不需要执行它们中的每一个。那么,正则表达式是什么样的,它们是完全随机的吗?
-
当然,数据库仍然必须针对所有 1M 正则表达式测试字符串,因此您并没有提高效率,只是将负载从客户端转移到服务器。只有明显的优化是并行化,这应该是微不足道的