正则表达式之Matcher类中group方法

前言

同事把一个excel表给我,里面的数据大概有几千的样子吧。本身须要把里面的数据一个一个拿出来作一个http请求,对获得的结果进行过滤,而后再写到上面去。这是就涉及到用脚原本进行操做了,因而本身搞了一个Java的脚本出来,里面涉及到一些正则表达式,本身虽说会,可是一直对 Matcher类中的group方法 不太了解。网上的博客也没有写的特别清楚,因而有了此文。html

Pattern 和 Matcher

java.util.regex 包下java

  1. Pattern(模式类) : 用来表达和陈述所要搜索模式的对象。Pattern.compile(pattern) pattern 也就是你写的正则表达式
  2. Matcher(匹配器类):真正影响搜索的对象。上面Pattern.compile(pattern)获得一个Pattern对象 为 rr.matcher(line) line也便是你须要进行匹配的字符串 。这样会获得一个 Matcher 的对象。
  3. PatternSyntaxException: 当遇到不合法的搜索模式时,会抛出例外。

正则表达式语法

在有的语言中,一个反斜杠 \ 就足以具备转义的做用,可是Java中须要两个 \\ 反斜杠。表示转义的做用。一些字符在正则表达式中的说明,意义。详情可查看 runoob正则表达式

上代码

如今个人正则表达式为 (//d+)([a-z]+)(//d+)express

  1. //d+ 表示最少匹配一个数字
  2. [a-z]+ 表示最少匹配一个字符
  3. 须要指定的字符串为 "123ra9040 123123aj234 adf12322ad 222jsk22"
  4. 代码以下 :
public static void main( String args[] ){

        // 按指定模式在字符串查找
        String line = "123ra9040 123123aj234 adf12322ad 222jsk22";
        String pattern = "(\\d+)([a-z]+)(\\d+)";
// String pattern1 = "([\\u4E00-\\u9FA5]+|\\w+)";

        // 建立 Pattern 对象
        Pattern r = Pattern.compile(pattern);

        // 如今建立 matcher 对象
        Matcher m = r.matcher(line);
        int i = 0;
        // m.find 是否找到正则表达式中符合条件的字符串
        while (m.find( )) {
            // 拿到上面匹配到的数据
            System.out.println("----i="+i);
            System.out.println("Found value: " + m.group(0) );
            System.out.println("Found value: " + m.group(1) );
            System.out.println("Found value: " + m.group(2) );
            System.out.println("Found value: " + m.group(3) );
            i++;
            System.out.println("|||||||");
            System.out.println("");
        }
    }
复制代码

输出:spa

----i=0
Found value: 123ra9040
Found value: 123
Found value: ra
Found value: 9040
|||||||

----i=1
Found value: 123123aj234
Found value: 123123
Found value: aj
Found value: 234
|||||||

----i=2
Found value: 222jsk22
Found value: 222
Found value: jsk
Found value: 22
|||||||
复制代码
  1. group(0) 对应着 ((//d+)([a-z]+)(//d+)) 123ra9040
  2. group(2) 输出的数据 是 group(0)中所匹配的数据 也就是([a-z]+) 匹配到是数据 ra
  3. group(3) 输出的数据 是 group(0)中所匹配的数据 也就是(//d+) 匹配到是数据 9040

总结

  1. Matcher 类中group(0) 表示正则表达式中符合条件的字符串。
  2. Matcher 类中 group(1) 表示正则表达式中符合条件的字符串中的第一个() 中的字符串。
  3. Matcher 类中 group(2) 表示正则表达式中符合条件的字符串中的第二个() 中的字符串。
  4. Matcher 类中 group(3) 表示正则表达式中符合条件的字符串中的第三个() 中的字符串。
  5. 若是不明白,我相信看代码会很明白的。
相关文章
相关标签/搜索