2011-04-29 37 views
1

我想創建一個小窗口,在這裏,用戶將:Java - 如何格式化正則表達式?

  1. 輸入JTextField1一些文本。
  2. 然後他將在JTextField2中輸入一個正則表達式來檢查JTextField1中的文本是否有一些與此正則表達式匹配的文本。
  3. 另一個字段JTextField3,他可以輸入格式匹配的文本
  4. 用戶然後將得到最終的文本匹配並在JTextField4中格式化。

這似乎很複雜,但我希望這個畫面會澄清我的需求: enter image description here

實施第2場是容易的,但第三場,這就是我要問什麼。我已經閱讀了關於可以幫助我做到這一點的Back參考文獻,但對我而言並不那麼清楚。我的理解是,如果我在屏幕截圖中顯示了\ 2,\ 1,那麼它將抓住正則表達式中的第二個括號,然後添加一個逗號+空格,然後抓取正則表達式中的第一個括號,給出正確的最終結果結果。

1.這是正確的,還是我錯過了什麼?

2.這是實施我需要做的最好的解決方案嗎?

3.獲得Java代碼中的匹配器=返回「K1234 T1234567」使用指定的格式對其進行格式化的代碼是什麼?

+1

1)第二個括號組,然後第一個括號組,但是。 2)似乎是合理的 – MeBigFatGuy 2011-04-29 04:33:01

+0

@MeBigFatGuy ..謝謝。如果你不介意我已經添加了問題(3),如果你能回答它。 – Brad 2011-04-29 04:53:55

+1

請參閱WhiteFangs的答案,正確。 – MeBigFatGuy 2011-04-29 05:03:14

回答

1

你看起來沒錯。你需要像這樣得到格式化的結果:

// your inputs for the sake of a working example snippet 
String text = "K1234 T1234567"; 
String query = "([A-Z]{1}[0-9]{4})((\\){1})([A-Z]{1}[0-9]{7})"; 
String format = "\\4, \\1"; 

// usual regex pattern matching 
Pattern pattern = Pattern.compile(query); 
Matcher matcher = pattern.matcher(text); 
matcher.find(); 

// you need to tweak the format to use $ instead of \ for replacement 
String replacement = format.replaceAll("\\\\", "\\$"); 
String result = matcher.replaceAll(replacement); 

// this outputs "T1234567, K1234" 
System.out.println(result); 
+0

..非常感謝,它工作正常。 – Brad 2011-04-29 05:53:47