[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:字符类 [ ...
随机推荐
- java源文件中是否必须要有一个public类?
java源文件中不必有一个public类,如果没有public类的话,那么文件名可以是任意合法名称,且编译完成之后如果该源文件中有多个独立的类,则会生成多个对应的.class文件.
- EF vs ADO.NET
EF有什么缺点,什么时候需要考虑用ADO.NET http://blog.sina.com.cn/s/blog_4aedf6370102wgxl.html
- 火币网现货API[Python3版]
火币 期货 现货 API [Python3版] 一.Util.py,基础类,包括参数配置.签名,HTTP 请求方法,发送信息到API #coding=utf-8 import hashlib impo ...
- 获取当前页面URL信息
文章链接:http://www.cnblogs.com/hongmaju/p/5510988.html 查看信息可以在控制台输出(tab或者右移补全): 如:document.URL window. ...
- 产品经理和Scrum Master都必须是领域专家吗?
注明:原文来自 Mike Cohn的邮件推送,我已将原文贴在最后供参考,翻译的目的是为了锻炼自己的能力和理解水平,如有版权侵犯,请告之. Scrum Master 和 产品经理应该是领域专家吗?让我们 ...
- poj2828 Buy ticket
Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...
- 论述Redis和Memcached的差异
原文 https://yq.aliyun.com/articles/60981?utm_campaign=wenzhang&utm_medium=article&utm_source= ...
- 关于idea的使用心得
开发java多年,所在的项目组一直都在使用的eclipse或者myeclipse,今天偶然的机会接触到了idea,感觉优化的确实不错,下面是我的一些使用心得:
- TC358743XBG:HDMI转MIPI CSI参考设计
TC358743XBG参考设计电路图如下, 功能HDMI转MIPI CSI ,通信方式:IIC,分辨率1920*1080,封装形式BGA64.
- 【译】怎样处理 Safari 移动端对图片资源的限制
原文作者:Thijs van der Vossen 本文翻译自<How to work around the Mobile Safari image resource limit>,原文写 ...