2010-09-20 77 views
1

我開發了一個UI,允許用戶定義正則表達式模式,然後使用由appendReplacement()使用的替換字符串。測試Java正則表達式appendReplacement()

例如

  • 模式 - (。*)7
  • 更換模式 - 新臺幣$ 30

所以71234將產生1234

反正我有可以驗證輸入模式和替換模式是不需要用戶輸入匹配的字符串就可以兼容?例如,如果替換模式是$1$2那麼這會在運行時引發異常。我可以提前檢查嗎?

編輯:

最終的解決辦法是做的aioobe建議,並通過創建一個虛擬匹配器拿到小組數(不知道爲什麼這種方法不是對模式TBH),然後手動解析字符串替換手動找到哪些$組引用存在。有點煩躁,但有效。

回答

2

嗯,你可以這樣做:

yourPattern.matcher("").groupCount(); 

groupCount()將返回捕獲組(其中至少可以被認爲是什麼樣的用戶可以參考上限)的數量。

+0

謝謝,我可以然後驗證對替換模式,以確保$ 2不存在,如果只有一個組? – 2010-09-20 10:00:56

+0

是的。這似乎是一個好主意。 – aioobe 2010-09-20 10:45:10

+0

請注意,仍然可能存在基於正在匹配的實際文本評估爲空的組。例如,模式'(a)|(b)'有2個組,但只有其中一個與文本匹配。 – Avi 2010-09-20 11:57:40