这篇文章主要介绍了Java正则表达式模式和匹配器原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
<>强基本使用
强>
扫描仪中的使用正则表达式
//扫描仪支持的分组 扫描仪cin=new扫描仪(“红色bbc”) .useDelimiter (“\ \ * \ \ s *”); System.out.println (cin.next ()); System.out.println (cin.next ());: redbbc
等同于下面代码
//等于正则 扫描仪cin2=new扫描仪(“红色bbc”); cin2.findInLine (" \ \ s * ");//findLine允许存在多个,匹配()为最终需要匹配的字符串 MatchResult结果=cin2.match (); for (int i=0;我& lt;result.groupCount ();我+ +){ System.out.println (result.group (i)); }
模式:
//基本匹配 布尔b=模式。匹配(“a * b”、“aaaab”);System.out.println (b);
字符串的aplit的实现
//按照数字分割 p=Pattern.compile模式(“\ \ d +”); String [] str=p.split(“好456456像:0532214是”); for (int i=0;我& lt;str.length;我+ +){ [我]System.out.println (str); }
一般使用模式。匹配(字符串正则表达式,CharSequence进行输入)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串。
Java代码示例:
Pattern.matches (" \ \ d + ", " 2223 ");//返回现实 Pattern.matches (“\ \ d +”,“2223”aa);//返回假,需要匹配到所有字符串才能返回真,这里aa不能匹配到 Pattern.matches (“\ \ d +”、“22 bb23 ");//返回假,需要匹配到所有字符串才能返回真,这里bb不能匹配到p=Pattern.compile模式(“\ \ d +”);匹配器m=p.matcher (“22 bb23”);m.pattern();//返回p也就是返回该匹配器对象是由哪个模式对象的创建的
重点:
匹配方法尝试将整个输入序列与该模式匹配。
lookingAt尝试将输入序列从头开始与该模式匹配。
找到方法扫描输入序列以查找与该模式匹配的下一个子序列。
//匹配()对整个字符串进行匹配,只有整个字符串都匹配了才返回现实 p=Pattern.compile模式(“\ \ d +”); 匹配器m=p.matcher (“22 bb23”); m.matches();//返回假,因为bb不能被\ d +匹配,导致整个字符串匹配未成功。 匹配器m2=p.matcher (“2223”); m2.matches();//返回正确的,因为\ d +匹配到了整个字符串//lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回现实 模式p1=Pattern.compile (“\ \ d +”); 匹配器m3=p1.matcher (“22 bb23”); m.lookingAt();//返回正确的,因为\ d +匹配到了前面的22所示 匹配器m4=p1.matcher (“aa2223”); m2.lookingAt();//返回假,因为\ d +不能匹配前面的aa//找到()对字符串进行匹配,匹配到的字符串可以在任何位置。 模式p2=Pattern.compile (“\ \ d +”); 匹配器m5=p2.matcher (“22 bb23”); m.find();//返回现实 匹配器m6=p2.matcher (“aa2223”); m2.find();//返回现实 匹配器m7=p2.matcher (“aa2223bb”); m3.find();//返回现实 匹配器m8=p2.matcher (“aabb”); m4.find();//返回假
Mathcer.start ()/Matcher.end ()/Matcher.group ()
当使用匹配(),lookingAt(),()找到执行匹配操作后,就可以利用以上三个方法得到更详细的信息。
-
<李> start()返回匹配到的子字符串在字符串中的索引位置。李>
<李>结束()返回匹配到的子字符串的最后一个字符在字符串中的索引位置。即为最后位置加一李>
<李>集团()返回匹配到的子字符串李>
Java代码示例:
p=Pattern.compile模式(“\ \ d +”); 匹配器m=p.matcher (“aaa2223bb”); 2223年m.find();//匹配 m.start();//返回3 m.end();//返回7日返回的是2223后的索引号 m.group();//返回2223 Mathcer m2=p.matcher (“2223 bb”); m2.lookingAt ();2223年//匹配 m2.start ();//返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,开始()方法总是返回0 m2.end ();//返回4 m2.group ();//返回2223 匹配器m3=p.matcher (“2223”);//如果匹配器m3=p.matcher (“2223 bb”);那么下面的方法出错,因为不匹配返回错误的 m3.matches ();//匹配整个字符串 m3.start ();//返回0 m3.end ();//返回3,原因相信大家也清楚了,因为匹配()需要匹配所有字符串 m3.group ();//返回2223Java正则表达式模式和匹配器原理详解