2012-08-04 56 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