正则表达式查找
0
以前也搞过正则表达式查找字符串,但是一直都不求甚解,所以也就只会糊里糊涂的用,有时候还是试出来的。
最近用Nginx重写,里面用了些正则表达式,所以这里也认真看了看正则表达式查找。
基本查找
String reg = "\\d";
String txt = "12这a3是4c一g5个6i测7s试89t!0";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(txt);
while(matcher.find()) {
System.out.println(matcher.groupCount()); // 匹配到的组
System.out.println(matcher.group()); // 找到的第一个组合下面一样,0表示匹配整个表达式
System.out.println(matcher.group(0));
System.out.println("------------------------------分割线------------------------------");
}
分组匹配
String reg = "(\\d+)([a-z])";
String txt = "12这a3是4c一g5个6i测7s试89t!0";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(txt);
while(matcher.find()) {
System.out.println(matcher.groupCount());
System.out.println(matcher.group()); // 整个表达式匹配
System.out.println(matcher.group(0)); // 整个表达式匹配
System.out.println(matcher.group(1)); // 第一个小括号匹配
System.out.println(matcher.group(2)); // 第二个小括号匹配
System.out.println("------------------------------分割线------------------------------");
}
这里的小括号表示一个分组,如果表达式这样((\\d+)([a-z]))
,那么1
表示的是最大的小括号,然后2
表示第二个小括号,以此类推。
有时候我们看到一种写法(.*?)
,这种表示尽可能少的重复。
更多正则表达式知识:http://www.jb51.net/tools/zhengze.html