簡體   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