Java正则表达式模式和匹配器原理详解

  

这篇文章主要介绍了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 ();//返回2223

Java正则表达式模式和匹配器原理详解