是否有一个提供正则表达式静态分析的库?

时间:2009-10-05 21:03:17

标签: regex static-analysis

具体来说,是否存在一个库,当给定2个(或更多)正则表达式时,它可以判断是否存在两个匹配的输入?如果可以通过Java或.NET轻松访问,则可以获得奖励积分,但命令行也可以。

Asker的日志,补充:

将提供给此算法的正则表达式非常简单。虽然我相信有一对前瞻,但它们都是文字或字符类的相当简单的组合,具有固定的最小和最大长度。

4 个答案:

答案 0 :(得分:4)

我发现了一个python库,可以让我做我需要做的事情。

>>> import reCompiler
>>> fsa1 = reCompiler.compileRE('\d\d\d?\d?a')
>>> fsa2 = reCompiler.compileRE('123a')
>>> fsa3 = reCompiler.compileRE('a23a')
>>> print len(FSA.intersection(fsa1, fsa2).finalStates)
1
>>> print len(FSA.intersection(fsa1, fsa3).finalStates)
0

该库名为pyFSA。我需要实现一些预处理来将\ d {2,4}之类的语句转换为\ d \ d \ d?\ d ?,但除此之外,它应该很好地满足我的需求。感谢您的参与,如果人们找到以其他语言实现此功能的库,请务必包含它们。

答案 1 :(得分:3)

如果有它将无法在有用的时间内运行。比较正则表达式是PSPACE问题

http://en.wikipedia.org/wiki/PSPACE-complete

如果您对正则表达式允许额外限制,可能会有运气

答案 2 :(得分:3)

如果,我理解正确,你想知道2个正则表达式的交集是否为空集?我认为这很难,但是如果复杂性在正则表达式的长度上具有指数性,我不会感到惊讶(尽管一些正则表达式会比其他正则表达式更容易)

无论如何,这是一个Haskell实现: http://sulzmann.blogspot.com/2008/11/playing-with-regular-expressions.html

和prolog实施 http://www.let.rug.nl/vannoord/Fsa/

答案 3 :(得分:0)

这可能是一个开始的地方。

http://kedrigern.dcs.fmph.uniba.sk/~riso/papers/KraPhD.pdf