存储简单正则表达式的有效方法

时间:2012-08-01 01:20:37

标签: sql regex database data-structures

我有一个简单的正则表达式列表:

ABC.+DE.+FHIJ.+
.+XY.+Z.+AB
.+KLM.+NO.+J.+
QRST.+UV

他们都有。+和一些文字(我将称之为“单词”)的交替模式重复了若干次。模式可能会也可能不会开始或结束。+。这些正则表达式都是互斥的。当添加另一个正则表达式时,我想删除任何其他匹配的正则表达式,并添加一个将添加的正则表达式与其所有匹配项组合在一起的正则表达式。例如,添加:

.+J.+ 

会匹配,

ABC.+DE.+FHIJ.+
.+KLM.+NO.+J.+

因此,这些将被删除并替换为添加的正则表达式,从而导致:

.+J.+ 
.+XY.+Z.+AB
QRST.+UV

我需要将这些模式存储在某些数据结构中,或者(优选地)以有效的方式存储在数据库中。我首先尝试了一个字典树,只是意识到在正则表达式以。*开头的情况下,它必须在整个树中搜索下一个字,即O(2 ^ n)。不幸的是,(除非我弄错了)似乎我所使用的SQLite(我使用的)和任何其他关系数据库都不支持“正则表达式”作为数据类型。我的问题是,是否有一种有效的方法来存储和检索这种简单的正则表达式?如果没有固定方法,是否有一些相对有效的数据结构(比如最差的多项式时间)?

1 个答案:

答案 0 :(得分:0)

您能否解释一下您使用这些正则表达式的原因,以便更容易提供更好的答案?特别是当我看到你分割正则表达式的方式时,我想知道TrieDirected acyclic word graph是否更适合。

从他们那里你可能会发现你的答案就像提供更好的规范化或找到一个专门为你的问题区域制作的替代SQL数据库一样简单。