基本使用:

本文不讲解正则表达式,需要请看API

Scanner中的使用正则表达式

  //Scanner 支持的分组
Scanner cin=new Scanner("red a bbc").useDelimiter("\\s*a\\s*");
System.out.println(cin.next());
System.out.println(cin.next());
out:

red
bbc

等同于下面代码

//等于 正则
Scanner cin2=new Scanner("red a bbc");
cin2.findInLine("\\s*"); // findLine 允许存在多个,match()为最终需要匹配的字符串
MatchResult result = cin2.match();
for (int i = 0; i < result.groupCount(); i++) {
System.out.println(result.group(i));
}

Pattern:

 //基本匹配
boolean b = Pattern.matches("a*b", "aaaab");
System.out.println(b);

String的aplit的实现

//按照数字分割
Pattern p=Pattern.compile("\\d+");
String[] str=p.split("好456456像:0532214是");
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]); }

一般使用Pattern.matches(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.

Java代码示例:
Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23");  m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的 
 

重点:

  • matches 方法尝试将整个输入序列与该模式匹配。

  • lookingAt 尝试将输入序列从头开始与该模式匹配。

  • find 方法扫描输入序列以查找与该模式匹配的下一个子序列。  

  // matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
Matcher m2=p.matcher("2223");
m2.matches();//返回true,因为\d+匹配到了整个字符串 // lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
Pattern p1=Pattern.compile("\\d+");
Matcher m3=p1.matcher("22bb23");
m.lookingAt();//返回true,因为\d+匹配到了前面的22
Matcher m4=p1.matcher("aa2223");
m2.lookingAt();//返回false,因为\d+不能匹配前面的aa // find()对字符串进行匹配,匹配到的字符串可以在任何位置.
Pattern p2=Pattern.compile("\\d+");
Matcher m5=p2.matcher("22bb23");
m.find();//返回true
Matcher m6=p2.matcher("aa2223");
m2.find();//返回true
Matcher m7=p2.matcher("aa2223bb");
m3.find();//返回true
Matcher m8=p2.matcher("aabb");
m4.find();//返回false

Mathcer.start()/ Matcher.end()/ Matcher.group() 
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.

  1. start()返回匹配到的子字符串在字符串中的索引位置.
  2. end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.  即为最后位置加一
  3. group()返回匹配到的子字符串
Java代码示例:
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("aaa2223bb");
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223后的索引号
m.group();//返回2223 Mathcer m2=p.matcher("2223bb");
m2.lookingAt(); //匹配2223
m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
m2.end(); //返回4
m2.group(); //返回2223 Matcher m3=p.matcher("2223"); //如果Matcher m3=p.matcher("2223bb"); 那么下面的方法出错,因为不匹配返回false
m3.matches(); //匹配整个字符串
m3.start(); //返回0
m3.end(); //返回3,原因相信大家也清楚了,因为matches()需要匹配所有字符串
m3.group(); //返回2223
说了这么多,相信大家都明白了以上几个方法的使用,该说说正则表达式的分组在java中是怎么使用的.
start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
Java代码示例:
Pattern p=Pattern.compile("([a-z]+)(\\d+)");
Matcher m=p.matcher("aaa2223bb");
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串

验证手机号

// 验证手机号
Pattern compile = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
Matcher matcher1 = compile.matcher("15071089603");
while(matcher1.find()){
System.out.println(matcher1.group());
} /**
* 验证手机号码
*
* 移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147、182
* 联通号码段:130、131、132、136、185、186、145
* 电信号码段:133、153、180、189、177
*
*/
String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,1,2,5-9])|(177))\\d{8}$";

java Pattern和Matcher完全解析的更多相关文章

  1. java Pattern和Matcher详解

    结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用Pattern.matcher(String ...

  2. Java Pattern和Matcher字符匹配详解

    http://tool.oschina.net/uploads/apidocs/jquery/regexp.html https://blog.csdn.net/rentian1/article/de ...

  3. JAVA 正则 Pattern 和 Matcher

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  4. java正则表达式Pattern和Matcher

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  5. Java基础知识强化77:正则表达式之获取功能(Pattern 和 Matcher类的使用)

    1. 获取功能: Pattern 和 Matcher类结合使用 2. 使用案例: package cn.itcast_05; import java.util.regex.Matcher; impor ...

  6. Java Pattern Matcher 正则应用

    转自:http://www.itzhai.com/java-notes-regex-matches-and-lookingat.html#read-more 1.基本语法 2.String内建的正则表 ...

  7. 【java】java.util.regex.Pattern和java.util.regex.Matcher简单示例

    package 正则; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test_regex ...

  8. JAVA正则表达式 Pattern和Matcher

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...

  9. 关于java中Pattern和Matcher区别于联系

    本文章转自: http://blog.csdn.net/cclovett/article/details/12448843 结论:Pattern与Matcher一起合作.Matcher类提供了对正则表 ...

随机推荐

  1. MPEG-PS封装格式

    据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS:TransportStream)和节目流(PS:ProgramStream) PS文件分为3层:ps层(Program Stre ...

  2. cookie禁用后重定向跳转时session的跟踪

  3. SQl Server Tsql基本编程 ,循环语句 ,存储过程

    一些比较重要但是不一定经常用的 句子 Tsql定义变量 declare @a int :  定义的变量前面必须用@,数据类型是SQL里的数据类型,执行的时候要把需要的有关联的代码一起执行,单独执行一条 ...

  4. win10右击windows键没有反应解决方案(1707版本)

    按Win+R打开运行,输入“regedit”打开注册表编辑器. 2.在“HKEY_CLASSES_ROOT”主键下找到“linkfile”或者".lnkfile"字符串值项,在右侧 ...

  5. ZROI2018普转提day7t1

    传送门 分析 一道有意思的小题... 我们发现如果$(1,1)$为白色,则将其变为白色需要偶数次操作,而如果为黑色则需要奇数次操作 我们知道要让A赢需要奇数次操作,所以我们只需要判断$(1,1)$的颜 ...

  6. loj10093 网络协议

    传送门 分析 第一问我们不难想出是缩点之后的新图中入度为0的点的个数,对于第二问,我们画一画可以发现最优策略就是对于每一个入度为0的点都有一个出度为0的点连向它,而对于每一个出度为0的点也一定连向一个 ...

  7. 3.4PCL中异常处理机制

    1.开发者如何增加一个新的异常类 2.如何使用自定义的异常 3.异常的处理

  8. Android开发环境搭建及HelloWorld

    在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld.本文的主题如下: 1.环境搭建 1.1.JDK安装 1.2.Eclipse安装 1.3.Android S ...

  9. WordCount程序及测试

    Github地址:https://github.com/CG0317/WordCount PSP表: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划  30 ...

  10. Socket编程--TCP服务端注意事项

    僵尸进程处理 僵尸进程和孤儿进程: 基本概念:我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预 ...