\\{[^}]+\\}
匹配“{”,之后不能紧跟“}”,可以多个{,最后匹配“}”
即字符串中第一个“{”和第一个“}”之间的部分
匹配“{”,之后不能紧跟“}”,可以多个{,最后匹配“}”
即字符串中第一个“{”和第一个“}”之间的部分
双斜杠“\\”为java里的转义字符
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;
public class test_handleMappingString {
//String uriPattern="http://www.188029.net";
//String uriPattern="http://www.188029.net/go?tt=3";
//String uriPattern="http://www^188029.net";
//String uriPattern="http://www^188029\net";
//String uriPattern="http://www^188029\\net";
//String uriPattern="http://w{ww^188029\\net";
//String uriPattern="http://w{ww^188{029}\\net";
String uriPattern="I {fuck {you} very} much !";
//String uriPattern="{}";
//String uriPattern="{8}";
//String uriPattern="{{}";
List<String> paramNames = new ArrayList<String>();
List<Integer> posSpan = new ArrayList<Integer>();
List<Character> afertCharacters = new ArrayList<Character>();
String handleMappingString() {
final Pattern pattern = Pattern.compile("\\{[^}]+\\}");
final Matcher matcher = pattern.matcher(uriPattern);
final StringBuilder uriMapping = new StringBuilder(uriPattern);
int fixPos = 0;
char[] tem;
int lastEnd = 0;
while (matcher.find()) {
System.out.println("找到了");
tem = new char[matcher.end() - matcher.start() - 2];
for(int i=0;i<tem.length;i++)
System.out.println("tem "+tem[i]);
System.out.println(matcher.start());
System.out.println(matcher.end());
uriMapping.getChars(matcher.start() - fixPos + 1, matcher.end() - fixPos - 1, tem, 0);
paramNames.add(new String(tem));
if (lastEnd == 0) {
posSpan.add(matcher.start());
} else {
posSpan.add(matcher.start() - lastEnd);
}
uriMapping.replace(matcher.start() - fixPos, matcher.end() - fixPos, "*");
fixPos = fixPos + matcher.end() - matcher.start() - 1;
lastEnd = matcher.end();
if (matcher.end() - fixPos < uriMapping.length()) {
afertCharacters.add(uriMapping.charAt(matcher.end() - fixPos));
} else {
afertCharacters.add(null);
}
}
return uriMapping.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
test_handleMappingString okla=new test_handleMappingString();
String letMeSee=okla.handleMappingString();
System.out.println(letMeSee);
}
}
输出:
找到了
tem
tem
....
tem
2
13
I * very} much !