正则表达式查找

以前也搞过正则表达式查找字符串,但是一直都不求甚解,所以也就只会糊里糊涂的用,有时候还是试出来的。
最近也是用了一些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