关于Java正则表达式应用的心得体会,做个总结。
案例:
Pattern p = Pattern.compile("a*b"); // 生成Pattern实例(设置匹配模式【规则】)- 静态方法
Matcher m = p.matcher("aaaaab"); // 生成Match实例(设置匹配选手【报名】)
boolean b = m.matches(); // 匹配选手按匹配模式进行匹配操作【全部】-属简单用法
等价于:
boolean b = Pattern.matches("a*b", "aaaaab"); // 静态方法 -属简单用法
总结:
Pattern.compile(regex).matcher(input).matches() // 案例的链式写法 -属简单用法
等价于:
Pattern.matches(regex, input); // 静态方法-属简单用法
【两个层面】:
一、Pattern层 ——> 靠Pattern.compile()方法生成
p.pattern():获得匹配模式【规则】(正则表达式)的字符串形式
p.split(input):用p匹配模式分割input字符串,返回字符串数组
简单用法:Pattern.matches(regex, input); // 静态方法
二、Matcher层 ——> 依赖于Pattern层而存在,靠p.matcher()方法生成
m.pattern():获得匹配模式【规则】(正则表达式)的字符串形式
m.matches():对匹配选手(整个字符串)进行完全匹配[简单用法] ——> 返回布尔值
【若开头部分能匹配成功,指针将移动至开头,但不能获取结果,匹配失败则不移动索引指针】
m.lookingAt():始终只对匹配选手开头部分的字符串进行匹配 ——> 返回布尔值
【若开头部分能匹配成功,指针将移动至开头,但能获取结果,匹配失败则不移动索引指针】
m.find():对字符串按索引指针位置进行迭代匹配 ——> 返回布尔值
【每次匹配成功都会移动索引指针至最近一次匹配成功的开头,能拿到匹配结果,匹配失败则不移动索引指针】
m.start():返回最近一次匹配的初始索引
m.end():返回最近一次匹配的结束索引
m.group():返回最近一次匹配的子字符串
如果有分组,那么:
m.groupCount():返回p匹配模式中的分组总数
m.start(i):返回最近一次匹配的第i个分组的初始索引
m.end(i):返回最近一次匹配的第i个分组的结束索引
m.group(i):返回最近一次匹配的第i个分组的子字符串
举例如下:
System.out.println("加载配置信息");
System.out.println("通过加载配置信息加载一个代理工厂Map:");
System.out.println("这个Map存放的是接口Class与对应的代理工厂");
MyInterface myInterface = new SqlSession().getMapper(MyInterface.class);
List<Object> list = myInterface.query(new Object());
System.out.println(list.size());
Pattern p = Pattern.compile("\\d+");
System.out.println(p.pattern());
System.out.println(p.toString());
System.out.println(p.flags());
System.out.println("++++++++++++++++++++++");
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee").length);
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[0]);
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[1]);
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[2]);
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[3]);
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[4]);
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[5]);
System.out.println(p.split("a3b896cd3265ef123g456hh789987gg456ee")[6]);
System.out.println(p.split(&quo