java中正则表达式的使用

java中的Pattern和Matcher的用法

通过java中的Pattern,可以定义一个正则表达式 。然后定义好正则表达式的Pattern创建一个和相对的字符串匹配的Matcher.

通过Matcher对字符串进行匹配查找。

示例如下

import java.util.regex.Matcher;

import java.util.regex.Pattern;
public class PatternTest {

      public void parse(String str){
             //解析出字符串中的zhangsan   lisi   wangwu
             Pattern pattern = Pattern.compile("name:('(\\w+)')");
             Matcher matcher = pattern.matcher(str);
             while(matcher.find()){
                  System.out.println("matcher.group输出结果:" + matcher.group());
                  System.out.println("Start:"+matcher.start()+" End:"+matcher.end());
                  System.out.println("matcher.group(0)输出结果:" + matcher.group(0));
                  System.out.println("Start 0:"+matcher.start(0)+" End 0:"+matcher.end(0));
                  System.out.println("matcher.group(1)输出结果:" + matcher.group(1));
                  System.out.println("Start 1:"+matcher.start(1)+" End 1:"+matcher.end(1));
                  System.out.println("matcher.group(2)输出结果:" + matcher.group(2));
                  System.out.println("Start 2:"+matcher.start(2)+" End 2:"+matcher.end(1));
                  System.out.println("---------------------------------------------");
            }
      }

      public static void main(String[] args) {
            PatternTest p = new PatternTest();
            String str = "[{name:'zhangsan',age:24},{name:'lisi',age:20},{name:'wangwu',age:30}]";
            p.parse(str); 

      }

}


当前代码的输出结果是

matcher.group输出结果:name:'zhangsan'
Start:2 End:17
matcher.group(0)输出结果:name:'zhangsan'
Start 0:2 End 0:17
matcher.group(1)输出结果:'zhangsan'
Start 1:7 End 1:17
matcher.group(2)输出结果:zhangsan
Start 2:8 End 2:17
---------------------------------------------
matcher.group输出结果:name:'lisi'
Start:27 End:38
matcher.group(0)输出结果:name:'lisi'
Start 0:27 End 0:38
matcher.group(1)输出结果:'lisi'
Start 1:32 End 1:38
matcher.group(2)输出结果:lisi
Start 2:33 End 2:38
---------------------------------------------
matcher.group输出结果:name:'wangwu'
Start:48 End:61
matcher.group(0)输出结果:name:'wangwu'
Start 0:48 End 0:61
matcher.group(1)输出结果:'wangwu'
Start 1:53 End 1:61
matcher.group(2)输出结果:wangwu
Start 2:54 End 2:61
---------------------------------------------


解析

1.正则匹配的含义

Pattern pattern = Pattern.compile("name:('(\\w+)')");   中的 “name:('(\\w+)')” 是正则表达式,\w 表示一个字符[a-zA-Z_0-9]中的任意一个 +表示至少一个 \\w+的意思是表示多个字符  name:('(\\w+)')匹配的字符是 name:'多个字符'。 传入的字符串中 name:'zhangsan' 就能与name:('(\\w+)')匹配。   zhangsan对应的是 \\w+。

2.分组的概念:

name:('(\\w+)') 表达式中的括号是分组的意思  此表达式可分为3组。 0组为整个表达式,即:name:('(\\w+)');   1组的表达式是最外边的括号包含的表达式,即:'(\\w+)'   2组的表达式是最里面的括号包含的表达式,即 \\w+。

3.Matcher

matcher.find()方法:找字符串中与正则匹配的内容,如果找到返回true,没有找到返回false

matcher.group()方法:返回相应的组匹配的字符。比如 通过find() 找到了name:'zhangsan'字符串的匹配 ,group()和group(0) 表示的是整个字符串,即name:'zhangsan'。               group(1)表示'(\\w+)'  即: 'zhangsan'  group(0)表示\\w+ 即:zhangsan。

matcher.start()方法: 对应的组起始字符的位置,通过输出结果可分析

matcher.end()方法: 对应的组结果字符的位置,通过输出结果可分析





猜你喜欢

转载自blog.csdn.net/fefsdf/article/details/76944885