2

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

提问者的日志,补充:

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

4

4 回答 4

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?,但除此之外它应该很好地满足我的需要。感谢您的输入,如果人们找到用其他语言实现此功能的库,请务必将它们包括在内。

于 2009-10-06T20:23:12.373 回答
3

如果有,它将不会在有用的时间内运行。比较正则表达式是一个 PSPACE 问题

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

如果您可以允许对您的正则表达式进行额外限制,您可能会有一些运气

于 2009-10-05T23:12:18.573 回答
3

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

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

还有一个序言实现 http://www.let.rug.nl/vannoord/Fsa/

于 2009-10-05T23:41:37.720 回答
0

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

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

于 2014-08-01T15:27:14.520 回答