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类相关推荐

  1. java 代码锁_Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...

  2. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  3. java 正则 捕获_Java通过正则表达式捕获组中的文本

    1.简介 Java 正则表达式如何捕获组中的文本 ?--请看下文. 2.代码 /** * 版权所有 编程十万个怎么办(www.tah1986.com) */ public class Capturin ...

  4. java 自定义正则表达式_java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * ...

  5. java正则测试_Java的正则表达式

    Java正则表达式:定义了字符串的模式:可以用来搜索.编辑.或处理文本: 指定为字符串的正则表达式必须首先被编译为此类的实例.然后将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任 ...

  6. 正则表达式符号特殊详解_常用正则表达式_Java中正则表达式的使用

    正则表达式符号详解 限定符: 指定一个组件必须出现多少次才能满足. 1.使用 "*", "+", "?" 作为限定符: "*&qu ...

  7. java邮箱匹配_Java邮箱正则表达式

    "^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$" 这个是一个企业 ...

  8. java 实现 string类_java 中String类的常用方法总结,带你玩转String类。

    String类: String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.String类对象创建后不能修改,StringBuffer & St ...

  9. java判断手机号_java使用正则表达式判断手机号的方法示例

    本文实例讲述了java使用正则表达式判断手机号的方法.分享给大家供大家参考,具体如下: 要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段, 故先要整清楚现在已经开放了 ...

最新文章

  1. 华为存储iscsi配置_网络+存储+虚拟化:三大要素构建新网络
  2. 我在上海的AI新地标,看懂了明略的游戏规则
  3. 【深度学习】快照集成等网络训练优化算法系列
  4. ubuntu安装lrzsz报错“E: Unable to locate package”
  5. 操作系统原理 : 非连续的内存分配,分段,页表
  6. JQuery 文本框高亮显示插件
  7. C# 的扩展方法在 LINQ 中实现数组排序
  8. MySQL 表和列的注释
  9. 南沙发布全国首个智慧城市物联网大数据管理平台
  10. android http 图片上传,Android okHttp上传图片
  11. Julia : SharedArrays与@async比快
  12. 快速打开内网服务器文件,Linux服务器局域网(内网)快速传输文件
  13. Stardock Fences v3.1.0.5 桌面整理、图标分类工具
  14. 『杭电1166』敌兵布阵
  15. java实验目的_Java实验报告(实验一)
  16. Excel使用VBA动态设置打印区域
  17. mybatis中的动态sql
  18. Ant构建工具知识概括
  19. Go 写测试必学的三个库:Ginkgo、testify和GoMock
  20. 统计学中的均值、方差、协方差

热门文章

  1. RGB图像三个分量的理解和显示
  2. Linux为什么最多能分4个四个主分区
  3. 这5个“减压”小妙招,在你负重前行的路上会用到!
  4. android studio manifest merger failed,Android Studio报错Manifest merger failed with multiple errors...
  5. 【< J.U.C>】
  6. android之按钮添加声音
  7. 技术管理如何做?管理者应具备哪些能力?
  8. goLang 位左移
  9. SQL server数据库实验(三)数据库的嵌套查询和集合查询
  10. 三国塔防魏传java_三国塔防魏传1.6详细攻略