2012-08-04 23 views
1

我需要用一個名爲group的正則表達式替換{word}:(?< word> \ w ++)以後的匹配表達式,即:/ {name}/{age} ...這段代碼不起作用!這個替換代碼有什麼問題?

String p = "/{name}/{id}"; 
p = p.replaceAll("\\{(\\w+)\\}", "(?<$1>\\\\\\\\w+)"); 
Pattern URL_PATTERN = Pattern.compile(p); 
CharSequence cs = "/lucas/3"; 
Matcher m = URL_PATTERN.matcher(cs); 
if(m.matches()){ 
    for(int i=1;i<m.groupCount();++i){ 
     System.out.println(m.group("name")); 
    } 
} 

結果:沒有什麼:(

但是,當我拿到更換的結果:/(?\ w +)/(?\ w +),並把在Pattern.compile()這個工程:

String p = "/{name}/{id}"; 
p = p.replaceAll("\\{(\\w+)\\}", "(?<$1>\\\\\\\\w+)"); 
Pattern URL_PATTERN = Pattern.compile("/(?<name>\\w+)/(?<id>\\w+)"); 
System.out.println(p); 
CharSequence cs = "/lucas/3"; 
Matcher m = URL_PATTERN.matcher(cs); 
if(m.matches()){ 
    for(int i=1;i<m.groupCount();++i){ 
     System.out.println(m.group("name")); 
    } 
} 

結果: 「盧卡斯」

什麼是錯

回答

1

我覺得你用了太多的\在你的替換。嘗試

p = p.replaceAll("\\{(\\w+)\\}", "(?<$1>\\\\\\w+)"); 
+0

它的工作原理! :) 謝謝! – 2012-08-04 14:09:17

+1

很高興我能幫忙:) – Pshemo 2012-08-04 14:11:36