繁体   English   中英

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

[英]Incremental Pattern (RegEx) matching in Java?

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

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

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

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

通过计算对应于正则表达式的有限状态自动机 ,并在处理输入的字符时对其执行状态转换,可以很好地实现增量匹配。 大多数词法分子以这种方式工作。 但是,这种方法对于群组来说效果不佳。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM