2011-11-01 138 views
0

我有一段代碼,試圖用一個循環內遞增指數反覆匹配模式之間的增量數字:正則表達式 - 捕捉大括號

for(int count = 0; count < args.length; count++) { 
     message.replaceFirst("^\\{" + count + "\\d}$", args[count]); 
    } 

我希望能夠做的是更換出現消息字符串中的{0},{1}等等與args中的值相同。但儘可能地嘗試,我根本無法得到匹配的模式。我不是正則表達式專家,但是我在這裏嘗試了基於其他問題的各種正則表達式組合。我也嘗試在StringUtils中使用替換方法無濟於事。任何人都可以提供建議嗎?

回答

1

根本不要使用正則表達式。您事先知道您的搜索字符串並且它是常量(即,您可以從常量字符串加上變量count來構建它),因此不需要包含正則表達式。

+0

沒錯,所以我也嘗試過'StringUtils.replace(message,「{」+ count +「}」,args [0]);'但那也行不通。 – Jeshurun

+0

之後你必須將它分配給你的變量,即'message = StringUtils.replace(...);'。 – Howard

+0

DANG字符串是不可改變的,可怕的是我忘記了。這個伎倆,非常感謝你! – Jeshurun

0

試試這個正則表達式:

String pattern = "^\\{\\d+\\}$"; 

說明:

  1. 從字符串的開頭獲得{
  2. 然後得到儘可能多的數字儘可能
  3. 直到}達到在字符串的末尾

例子:

String s = "{12}"; 
String pattern = "^\\{\\d+\\}$"; 
String s2 = s.replaceFirst(pattern, "9"); 

System.out.println(s2); 

輸出:

9 

這應該是很容易應用到你的代碼。

+0

當然'\\ d +'而不是'\\ d *'?我們(可能)不想匹配'{}'。 –

+0

是的,你說得對。更新了我的答案。 – Marcus

1

^$字符是錨。它們匹配字符串的開頭和結尾。只有整個字符串是{\\d}時,該表達式纔會匹配。我不認爲他們需要在那裏。

此外,字符串是在java中不可變的,正確的用法是message = message.replaceAll(blah);