2013-07-21 248 views
3

我有一個增量構建的字符串。在構建字符串的同時,通過正則表達式匹配整個字符串,並在找到匹配項時執行特定任務。正則表達式的部分匹配

我的要求是:如果在字符串構建過程中發現沒有找到完全匹配的方法,那麼字符串應該被重置,並且應該重新啓動構建過程。

例如,如果一個正則表達式是"mada12gaskar"當一個char "3"被添加到現有字符串"mada1"字符串應該被清除,構建過程應該重新開始爲"mada13"決不會與"mada12gaskar"匹配。這可能通過Java正則表達式API嗎?

+0

提供你試圖寫澄清要求的代碼示例。正則表達式是正則表達式,所以匹配應該是可能的,但你需要其他邏輯來「清除你的字符串」。 – eebbesen

+2

爲什麼downvotes?這對我來說是一個很好的問題。 –

+0

我不是專家,但爲什麼不直接將最後一個匹配的字符串(例如'mada1')存儲在一個單獨的變量中,該變量被下一個匹配的字符串覆蓋?如果給定的字符串('mada13')不匹配,請用最後匹配的字符串覆蓋它,單獨存儲。 – nozzleman

回答

6

我想我找到了解決您的問題的可能方案。

Matcher#hitEnd()方法:

返回true,如果輸入的結尾是由搜索引擎由此匹配執行 最後一場比賽命中的操作。

當此方法返回true時,則可能有更多輸入 會更改上次搜索的結果。

現在,只需對陣使用還未完全構建字符串的正則表達式一個Matcher(通過Pattern實例獲得),並看看結果:

  • 如果匹配,你有你的贏家
  • ,如果它不匹配,看hitEnd()
    • 如果是true,建立更多的並再次嘗試
    • 如果是false,當前字符串永遠無法匹配,你可以刪除它,並重新開始
+2

帽子關了,我的回答被刪除了。 –

+0

只需要注意一點:「如果它是'假',當前的字符串永遠不會匹配,您可以放棄它並重新開始」 - 實際上您應該*回溯*並且可能找到具有相同前綴的不同字符串。 –

+0

@MarkoTopolnik當我發現該方法時,我同樣感到驚訝。儘管如此,在Matcher類中還是有一些好東西可以學習,我不知道其他方法中有一半是做什麼的。關於回溯 - 是的,當然。 –