[01] Pattern类和Matcher类
- Pattern 一个正则表达式经编译后的表现模式,可以理解为某正则的对应类
- Matcher 匹配检查器,根据Pattern对象作为匹配模式对字符串进行匹配检查
1、Pattern
1.1 获取Pattern对象
- static Pattern Pattern.compile(String regExp)
Pattern p = Pattern.compile("\\w+");
p.pattern(); //返回 \w+
Pattern p = Pattern.compile("\\w+");
p.pattern(); //返回 \w+
| Pattern | Pattern.compile(String regExp) | 返回正则表达式对应的Pattern对象 |
| String | pattern() | 返回Pattern对象对应的正则表达式的字符串形式 |
1.2 分隔字符串
Pattern p=Pattern.compile("\\d+");
String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com");
//结果:str[0]="我的QQ是:" str[1]="我的电话是:" str[2]="我的邮箱是:aaa@aaa.com"
Pattern p=Pattern.compile("\\d+");
String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com");
//结果:str[0]="我的QQ是:" str[1]="我的电话是:" str[2]="我的邮箱是:aaa@aaa.com"
| String[] | split(CharSequence input) | 符合匹配规则的字符串作为分隔符,分隔字符串并返回字符串数组 |
1.3 判断是否完整符合匹配规则
Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不符
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不符
Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不符
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不符
| boolean | matches(String regex, CharSequence input) | 判断字符串是否完整匹配对应的正则表达式 |
2、Matcher
2.1 获取Matcher对象
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.pattern(); //返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.pattern(); //返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的
| Matcher | matcher(CharSequence input) | 返回一个对应Pattern的Matcher对象 |
2.2 判断匹配规则
2.2.1 完整匹配判断
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.matches(); //返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
Matcher m2 = p.matcher("2223");
m2.matches(); //返回true,因为\d+匹配到了整个字符串
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.matches(); //返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
Matcher m2 = p.matcher("2223");
m2.matches(); //返回true,因为\d+匹配到了整个字符串
| boolean | matches() | 判断对应字符串是否完全匹配正则表达式 |
2.2.2 开头匹配判断
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.lookingAt(); //返回true,因为\d+匹配到了前面的22
Matcher m2 = p.matcher("aa2223");
m2.lookingAt(); //返回false,因为\d+不能匹配前面的aa
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.lookingAt(); //返回true,因为\d+匹配到了前面的22
Matcher m2 = p.matcher("aa2223");
m2.lookingAt(); //返回false,因为\d+不能匹配前面的aa
| boolean | lookingAt() | 符合正则的子串是否位于字符串首位 |
2.2.3 子串匹配判断
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.find(); //返回true
Matcher m2 = p.matcher("aa2223");
m2.find(); //返回true
Matcher m3 = p.matcher("aa2223bb");
m3.find(); //返回true
Matcher m4 = p.matcher("aabb");
m4.find(); //返回false
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
m.find(); //返回true
Matcher m2 = p.matcher("aa2223");
m2.find(); //返回true
Matcher m3 = p.matcher("aa2223bb");
m3.find(); //返回true
Matcher m4 = p.matcher("aabb");
m4.find(); //返回false
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("aaa2223bb222");
while (matcher.find()) {
System.out.println("ok");
}
//会输出两次ok,第一次匹配到了2223,第二次匹配到了尾部的222
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("aaa2223bb222");
while (matcher.find()) {
System.out.println("ok");
}
//会输出两次ok,第一次匹配到了2223,第二次匹配到了尾部的222
| boolean | find() | 判断是否存在符合正则的子串,可以重复调用直到找不到符合匹配的子串为止 |
2.3 子串匹配
- start() 返回匹配子串在字符串中的索引位置
- end() 返回匹配子串的最后一个字符在字符串中的索引位置
- group() 返回匹配到的子串
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("aaa2223bb");
m.find(); //返回true,匹配2223
m.start(); //返回3
m.end(); //返回7, 返回的是2223后的位置,非索引号
m.group(); //返回2223
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("aaa2223bb");
m.find(); //返回true,匹配2223
m.start(); //返回3
m.end(); //返回7, 返回的是2223后的位置,非索引号
m.group(); //返回2223
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("aaa2223bb222");
System.out.println(matcher.find());
System.out.println(matcher.group()); //返回2223
System.out.println(matcher.group()); //返回2223
System.out.println(matcher.group()); //返回2223
//因为上述find没有再次进行操作,即此刻的子串始终指向2223,那么下面我们将find循环调用
while (matcher.find()) {
System.out.println(matcher.group() + " - " + matcher.start() + ", " + matcher.end());
}
//会得到两个输出
//2223 - 3, 7
//222 - 9, 12
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("aaa2223bb222");
System.out.println(matcher.find());
System.out.println(matcher.group()); //返回2223
System.out.println(matcher.group()); //返回2223
System.out.println(matcher.group()); //返回2223
//因为上述find没有再次进行操作,即此刻的子串始终指向2223,那么下面我们将find循环调用
while (matcher.find()) {
System.out.println(matcher.group() + " - " + matcher.start() + ", " + matcher.end());
}
//会得到两个输出
//2223 - 3, 7
//222 - 9, 12
| int | start() | 返回匹配子串在字符串中的索引位置 |
| int | end() | 返回匹配子串最后一个字符在字符串中的位置(非索引) |
| String | group() | 返回匹配到的子串 |
2.4 分组操作
Pattern pattern = Pattern.compile("([a-z]+)(\\d+)");
Matcher matcher = pattern.matcher("aaa2223bb222xxx88");
System.out.println(matcher.groupCount());
System.out.println("========");
while (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println("--------");
}
Pattern pattern = Pattern.compile("([a-z]+)(\\d+)");
Matcher matcher = pattern.matcher("aaa2223bb222xxx88");
System.out.println(matcher.groupCount());
System.out.println("========");
while (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println("--------");
}
- 第一组为aaa,对应([a-z]);
- 第二组为2223,对应(\\d+)
2
========
aaa2223
aaa
2223
--------
bb222
bb
222
--------
xxx88
xxx
88
--------
2
========
aaa2223
aaa
2223
--------
bb222
bb
222
--------
xxx88
xxx
88
--------
| int | start(int i) | 返回第 i 组匹配到的子串在字符串中的索引位置 |
| int | end(int i) | 返回第 i 组匹配子串最后一个字符在字符串中的位置(非索引号) |
| String | group(int i) | 返回匹配到的字符串中第 i 组子串 |
3、参考链接
[01] Pattern类和Matcher类的更多相关文章
- JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- 正则表达式:Pattern类与Matcher类详解
一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式((A)(B(C)))中,存在四个这样的组: 1 ((A)(B(C))) 2 (A) 3 ...
- JAVA正则表达式:Pattern类与Matcher类详解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- Java正则表达式:Pattern类和Matcher类
一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1 ((A)(B(C))) 2 (A) 3 ...
- [转] JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和 Matcher Pattern 一个Pattern是一个正则表达式经编译后的 ...
- java.util.regex包下的Pattern类和Matcher类的使用总结
一.介绍 Java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现1.Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不 ...
- 详解Pattern类和Matcher类
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果 ...
- 正则表达式中Pattern类、Matcher类和matches()方法简析
1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它包括两个类:Pattern和Matcher . Pattern: 一个Pattern是一 ...
- 14-01 Java matches类,Pattern类,matcher类
Pattern类 正则表达式常见规则 A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') B:字符类 [ ...
随机推荐
- ASP.NET Core 使用Cookie验证身份
ASP.NET Core 1.x提供了通过Cookie 中间件将用户主体序列化为一个加密的Cookie,然后在后续请求中验证Cookie并重新创建主体,并将其分配给HttpContext.User属性 ...
- WeQuant交易策略—Dual Thrust
Dual Thrust策略 策略介绍 Dual Thrust是一个趋势跟踪系统,由Michael Chalek在20世纪80年代开发,曾被Future Thruth杂志评为最赚钱的策略之一. Dual ...
- 自动化的基于TypeScript的HTML5游戏开发
自动化的开发流程 在HTML5游戏开发或者说在Web客户端开发中,对项目代码进行修改之后,一般来说,需要手动刷新浏览器来查看代码修改后运行结果.这种手动的方式费时费力,降低了开发效率.另外,如果我们使 ...
- DotNetCore跨平台~Quartz热部署的福音~监控文件夹的变化
在DotNetCore出来之后,同时也使用了quartz进行调度中心的设计,将它做到docker里方便部署,在之前的quartz版本里支持配置文件的方式,而现在不支持了,我们应该去想一下,为什么不去支 ...
- AndroidTv Home界面实现原理(一)——Leanback 库的使用
接下去应该是梳理一下 Android Tv 主界面实现原理及解析的一个系列博客了,大体上的安排是先介绍 Google 官方提供的 Leanback 库的使用,如何使用该库来实现简单的 Home 界面, ...
- 利用python设计PDF报告,jinja2,whtmltopdf,matplotlib,pandas
转自:https://foofish.net/python-crawler-html2pdf.html 工具准备 弄清楚了网站的基本结构后就可以开始准备爬虫所依赖的工具包了.requests.beau ...
- spring-session 共享
Spring session 共享 一.引入依赖 <dependency> <groupId>redis.clients</groupId> <artifac ...
- .Net Mvc实现各种表格随意切换插件
一套Js代码,.只要改参数 在3种表格之间任意切换-(使用Js面向对象封装,可重写方法) 任意表格皮肤随便切换 flextgrid/bootstrapt/jqgrid 1 001 @{ 002 ...
- 详解java设计模式之责任链模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt175 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次 ...
- Mock Server 入门
Mock Server介绍 什么是mock ? 我在去年的时候介绍一篇幅 python mock的基本使用,http://www.cnblogs.com/fnng/p/5648247.html 主要是 ...