java正则表达式类_java中正则表达式之Pattern类与Matcher类
java中正则表达式之Pattern类与Matcher类
===================================================================================================
Pattern类说明
---------------------------------------------------------------------------------------------------
指定为字符串的正则表达式必须首先被编译为pattern类的实例。然后,可将得到的模式用于创建 Matcher 对象,
依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,
所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
在仅使用一次正则表达式时,可以方便地通过pattern类定义 matches 方法。此方法编译表达式并在单个
调用中将输入序列与其匹配。语句
boolean b = Pattern.matches("a*b", "aaaaab");
等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
此类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。
===================================================================================================
Matcher类说明
---------------------------------------------------------------------------------------------------
通过调用模式的 matcher 方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
1 matches 方法尝试将整个输入序列与该模式匹配。
(注:当调用String的matches()方法时,实际上是调用Pattern的静态方法matches().也就是相当于
调Matcher的matches(),所以是整个输入序列与模式匹配.)
2 lookingAt 尝试将输入序列从头开始与该模式匹配。
3 find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
此类的实例用于多个并发线程是不安全的。
===================================================================================================
测试代码
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* java中运用正则表达式的两个重要类:Pattern与Matcher
* @author fhd001
*/
public class PatternAndMatcherTest {
public static void main(String[] args) {
/*
* 常用的调用
*/
Pattern p1 = Pattern.compile("a*b");
String str1 = "aaaab";
Matcher m1 = p1.matcher(str1);
boolean b1 = m1.matches();
System.out.println(b1);
String str2 = "b";
Matcher m2 = p1.matcher(str2);
boolean b2 = m2.matches();
System.out.println(b2);
/*
* 另一种调用
* 等效于上面的语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
* 但它可供多个并发线程安全使用,而上面的调用则就不是安全的.
*/
boolean b3 = Pattern.matches("a*b","aaab");
System.out.println(b3);
//Pattern类的pattern方法:从pattern类的实例中返回匹配模式的字符串表示
String pattern1 = p1.pattern();
System.out.println(pattern1);
//Pattern类的split方法
String[]arr1 = p1.split("rrrrraaabccccaaaaab");
for (String string : arr1) {
System.out.println(string+">>>>");
}
/*
* Matcher类
*
* matches方法: 方法尝试将整个输入序列与该模式匹配
* lookingAt方法: 尝试将输入序列从头开始与该模式匹配,与 matches 方法类似,
* 此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
* find方法: 方法扫描输入序列以查找与该模式匹配的下一个子序列
*/
String str3 = "aabbcccaaaaaeeeaaaaaaaaagggga";
Pattern p3 = Pattern.compile("a+");
Matcher m3 = p3.matcher(str3);
boolean bo4 = m3.matches();
System.out.println("matches方法: "+bo4);
/*
* lookingAt方法,从开头第一个字符进行匹配,匹配成功了不再继续匹配,
* 从第一个字符开始,匹配失败了,也不继续匹配.不需要匹配整个序列
*/
boolean bo5 = m3.lookingAt();
if(bo5){
//group方法(不带参数)返回的就是匹配的子字符串.
System.out.println("lookingAt方法: "+m3.group());
}
//find方法:找到一个匹配的子串,还会继续找下一个子串.
while(m3.find()){
System.out.println("find方法: "+m3.group());
}
/*
* 带参数的group方法与不带参数的group方法区别
* 不带参数的group方法:find方法与lookingAt方法匹配出来的子序列(上面有演示)
* 带参数的group方法: 返回在以前匹配操作期间由给定组捕获的输入子序列。
*/
String str6 = "aaabbbccc";
Pattern p5 = Pattern.compile("(a+)(b+)(c+)");
Matcher m5 = p5.matcher(str6);
boolean boo = m5.matches();
if(boo){
int k = m5.groupCount()+1;//加1就是把0下标的整个字符序列加上,它也作为一组放在0下标的位置.
if(k>0){
for(int i=0;i
System.out.println(m5.group(i));
}
}
}
}
}
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* java中运用正则表达式的两个重要类:Pattern与Matcher
* @author fhd001
*/
public class PatternAndMatcherTest {
public static void main(String[] args) {
/*
* 常用的调用
*/
Pattern p1 = Pattern.compile("a*b");
String str1 = "aaaab";
Matcher m1 = p1.matcher(str1);
boolean b1 = m1.matches();
System.out.println(b1);
String str2 = "b";
Matcher m2 = p1.matcher(str2);
boolean b2 = m2.matches();
System.out.println(b2);
/*
* 另一种调用
* 等效于上面的语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
* 但它可供多个并发线程安全使用,而上面的调用则就不是安全的.
*/
boolean b3 = Pattern.matches("a*b", "aaab");
System.out.println(b3);
//Pattern类的pattern方法:从pattern类的实例中返回匹配模式的字符串表示
String pattern1 = p1.pattern();
System.out.println(pattern1);
//Pattern类的split方法
String[]arr1 = p1.split("rrrrraaabccccaaaaab");
for (String string : arr1) {
System.out.println(string+">>>>");
}
/*
* Matcher类
*
* matches方法:方法尝试将整个输入序列与该模式匹配
* lookingAt方法:尝试将输入序列从头开始与该模式匹配,与 matches 方法类似,
* 此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。
* find方法:方法扫描输入序列以查找与该模式匹配的下一个子序列
*/
String str3 = "aabbcccaaaaaeeeaaaaaaaaagggga";
Pattern p3 = Pattern.compile("a+");
Matcher m3 = p3.matcher(str3);
boolean bo4 = m3.matches();
System.out.println("matches方法: "+bo4);
/*
* lookingAt方法,从开头第一个字符进行匹配,匹配成功了不再继续匹配,
* 从第一个字符开始,匹配失败了,也不继续匹配.不需要匹配整个序列
*/
boolean bo5 = m3.lookingAt();
if(bo5){
//group方法(不带参数)返回的就是匹配的子字符串.
System.out.println("lookingAt方法: "+m3.group());
}
//find方法:找到一个匹配的子串,还会继续找下一个子串.
while(m3.find()){
System.out.println("find方法: "+m3.group());
}
/*
* 带参数的group方法与不带参数的group方法区别
* 不带参数的group方法:find方法与lookingAt方法匹配出来的子序列(上面有演示)
* 带参数的group方法: 返回在以前匹配操作期间由给定组捕获的输入子序列。
*/
String str6 = "aaabbbccc";
Pattern p5 = Pattern.compile("(a+)(b+)(c+)");
Matcher m5 = p5.matcher(str6);
boolean boo = m5.matches();
if(boo){
int k = m5.groupCount()+1;//加1就是把0下标的整个字符序列加上,它也作为一组放在0下标的位置.
if(k>0){
for(int i=0;i
System.out.println(m5.group(i));
}
}
}
}
}
结果代码
true
true
true
a*b
rrrrr>>>>
cccc>>>>
matches方法: false
lookingAt方法: aa
find方法: aaaaa
find方法: aaaaaaaaa
find方法: a
aaabbbccc
aaa
bbb
ccc
true
true
true
a*b
rrrrr>>>>
cccc>>>>
matches方法: false
lookingAt方法: aa
find方法: aaaaa
find方法: aaaaaaaaa
find方法: a
aaabbbccc
aaa
bbb
ccc
java正则表达式类_java中正则表达式之Pattern类与Matcher类相关推荐
- java 代码锁_Java中的Lock锁
Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...
- C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)
C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...
- java 正则 捕获_Java通过正则表达式捕获组中的文本
1.简介 Java 正则表达式如何捕获组中的文本 ?--请看下文. 2.代码 /** * 版权所有 编程十万个怎么办(www.tah1986.com) */ public class Capturin ...
- java 自定义正则表达式_java中正则表达式实例详解
Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...
- java正则测试_Java的正则表达式
Java正则表达式:定义了字符串的模式:可以用来搜索.编辑.或处理文本: 指定为字符串的正则表达式必须首先被编译为此类的实例.然后将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任 ...
- 正则表达式符号特殊详解_常用正则表达式_Java中正则表达式的使用
正则表达式符号详解 限定符: 指定一个组件必须出现多少次才能满足. 1.使用 "*", "+", "?" 作为限定符: "*&qu ...
- java邮箱匹配_Java邮箱正则表达式
"^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$" 这个是一个企业 ...
- java 实现 string类_java 中String类的常用方法总结,带你玩转String类。
String类: String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.String类对象创建后不能修改,StringBuffer & St ...
- java判断手机号_java使用正则表达式判断手机号的方法示例
本文实例讲述了java使用正则表达式判断手机号的方法.分享给大家供大家参考,具体如下: 要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段, 故先要整清楚现在已经开放了 ...
最新文章
- 华为存储iscsi配置_网络+存储+虚拟化:三大要素构建新网络
- 我在上海的AI新地标,看懂了明略的游戏规则
- 【深度学习】快照集成等网络训练优化算法系列
- ubuntu安装lrzsz报错“E: Unable to locate package”
- 操作系统原理 : 非连续的内存分配,分段,页表
- JQuery 文本框高亮显示插件
- C# 的扩展方法在 LINQ 中实现数组排序
- MySQL 表和列的注释
- 南沙发布全国首个智慧城市物联网大数据管理平台
- android http 图片上传,Android okHttp上传图片
- Julia : SharedArrays与@async比快
- 快速打开内网服务器文件,Linux服务器局域网(内网)快速传输文件
- Stardock Fences v3.1.0.5 桌面整理、图标分类工具
- 『杭电1166』敌兵布阵
- java实验目的_Java实验报告(实验一)
- Excel使用VBA动态设置打印区域
- mybatis中的动态sql
- Ant构建工具知识概括
- Go 写测试必学的三个库:Ginkgo、testify和GoMock
- 统计学中的均值、方差、协方差
热门文章
- RGB图像三个分量的理解和显示
- Linux为什么最多能分4个四个主分区
- 这5个“减压”小妙招,在你负重前行的路上会用到!
- android studio manifest merger failed,Android Studio报错Manifest merger failed with multiple errors...
- 【< J.U.C>】
- android之按钮添加声音
- 技术管理如何做?管理者应具备哪些能力?
- goLang 位左移
- SQL server数据库实验(三)数据库的嵌套查询和集合查询
- 三国塔防魏传java_三国塔防魏传1.6详细攻略