前言
记录日常工作碰到的一些正则小细节
1、group分组
需要通过()把提取的参数圈起来,这样才会产生分组
1
2
3
4
5
6
7
8
9
10
|
private static String collectMapperId(String value) {
String result = "";
String regId = "id=\"(.*?)\"";
Pattern pattern = Pattern.compile(regId);
Matcher matcher = pattern.matcher(value);
if (matcher.find()) {
result = matcher.group(1);
}
return result;
}
|
对比如果没有(),是没有分组效果的
1
2
|
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1
at java.util.regex.Matcher.group(Matcher.java:538)
|
阅读源码和源码中的注释,其实也是s.substring(m.start(g), m.end(g))
2、测试加强理解
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) throws Exception{
String regEx = "count(\\d+)(df)";
String s = "count000dfdfsdffaaaa1";
Pattern pat = Pattern.compile(regEx);
Matcher mat = pat.matcher(s);
if(mat.find()){
System.out.println(mat.group(2));
}
}
|
输出结果
1
2
3
|
mat.group() 输出为 count000df
mat.group(1) 输出为 000
mat.group(2) 输出为 df
|
如果没有括号会有异常。这就是()的作用。
1
2
3
4
5
6
7
8
9
|
public static void main(String []args){
String regEx = "count\\d+";
String s = "count000dfdfsdff1";
Pattern pat = Pattern.compile(regEx);
Matcher mat = pat.matcher(s);
if(mat.find()){
System.out.println(mat.group());
}
}
|
输出结果
1
2
|
输出会按照"count\\d+"正则输出.
结果是 count000
|
…to be continue