4

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

我的意思是,我想要一个 OutputStream,我可以一次发送几个字节,并跟踪迄今为止的数据与正则表达式的匹配。如果接收到一个字节会导致这个正则表达式绝对匹配,我希望流告诉我。否则,它应该让我了解当前的最佳匹配,如果有的话。

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

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

4

1 回答 1

1

通过计算与正则表达式对应的有限状态自动机,并在处理输入字符时对其执行状态转换,可以很好地实现增量匹配。大多数词法分析器都是这样工作的。但是,这种方法不适用于group

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

于 2012-10-09T17:14:16.640 回答