Java中的增量模式(RegEx)匹配?

时间:2012-10-09 16:32:49

标签: java regex

是否有方法或高效的库允许在Java中进行增量正则表达式匹配?

我的意思是,我希望有一个OutputStream,我可以一次发送几个字节,并跟踪到目前为止与正则表达式匹配的数据。如果收到一个字节会导致这个正则表达式明确地匹配,我希望该流告诉我。否则,它应该让我随时了解当前最佳匹配(如果有的话)。

我意识到这可能是一个非常困难且定义不明确的问题,因为人们可以想象正则表达式可以匹配整个表达式或其任何部分或者在流被关闭之前没有决定。即使像。*这样微不足道的东西也可以匹配H,He,Hel,Hell,Hello等等。在这种情况下,我希望该流说:“是的,如果它现在结束了,这个表达式可以匹配,这里是它将返回的组。”

但是如果Pattern内部逐步遍历字符串,它逐个字符匹配,那可能不是那么难吗?

1 个答案:

答案 0 :(得分:1)

通过计算与正则表达式相对应的有限状态自动机,并在处理输入字符时对其执行状态转换,可以很好地实现

增量匹配。大多数词法分子以这种方式工作。但是,这种方法不适用于

所以也许你可以把这两部分做成:有一个匹配器可以确定是否有任何匹配,或者将来有任何匹配的机会。您可以使用它在每个输入字符后快速回复。完成匹配后,您可以执行回溯并对正则表达式引擎进行分组以识别匹配的组。在某些情况下,将分组内容编码到自动机中也是可行的,但我想不出一种通用的方法来实现这一点。