转载自:http://blog.csdn.net/yin380697242/article/details/52049999

概述

  • Pattern类的作用在于编译正则表达式后创建一个匹配模式.
  • Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配

Pattern类

常用方法及介绍

  • Pattern complie(String regex) 
    由于Pattern的构造函数是私有的,不可以直接创建,所以通过静态方法compile(String regex)方法来创建,将给定的正则表达式编译并赋予给Pattern类

  • String pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数


String regex = "\\?|\\*";
Pattern pattern = Pattern.compile(regex);
String patternStr = pattern.pattern();//返回\?\*
  • 1
  • 2
  • 3
  • Pattern compile(String regex, int flags) 方法功能和compile(String regex)相同,不过增加了flag参数

  • int flags() 返回当前Pattern的匹配flag参数. 
    flag参数用来控制正则表达式的匹配行为,可取值范围如下:


Pattern.CANON_EQ 当且仅当两个字符的”正规分解(canonical decomposition)”都完全相同的情况下,才认定匹配.比如用了这个标志之后,表达式”a\u030A”会匹配”?”.默认情况下,不考虑”规范相等性(canonical equivalence)”.

Pattern.CASE_INSENSITIVE(?i) 默认情况下,大小写不明感的匹配只适用于US-ASCII字符集.这个标志能让表达式忽略大小写进行匹配.要想对Unicode字符进行大小不明感的匹 配,只要将UNICODE_CASE与这个标志合起来就行了.

Pattern.COMMENTS(?x) 在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的”\s”,而是指表达式里的空格,tab,回车之类).注释从#开始,一直到这行结束.可以通过嵌入式的标志来启用Unix行模式.

Pattern.DOTALL(?s)在这种模式下,表达式’.’可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式’.’不匹配行的结束符.

Pattern.MULTILINE(?m)在这种模式下,’\^’和’$’分别匹配一行的开始和结束.此外,’^’仍然匹配字符串的开始,’$’也匹配字符串的结束.默认情况下,这两个表达式仅仅匹配字符串的开始和结束.

Pattern.UNICODE_CASE(?u) 在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配.默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集.

Pattern.UNIX_LINES(?d) 在这个模式下,只有’\n’才被认作一行的中止,并且与’.’,’^’,以及’$’进行匹配.

  • Pattern.matcher(CharSequence input) 对指定输入的字符串创建一个Matcher对象

Pattern pattern = Pattern.compile("\\?{2}");
Matcher matcher = pattern.matcher("??");
boolean matches = matcher.matches();// true
  • 1
  • 2
  • 3
  • String[] split(CharSequence input) 
    String[] split(CharSequence input, int limit)

  • String[] split(CharSequence input, int limit) 
    功能和String[] split(CharSequence input)相同,增加参数limit目的在于要指定分割的段数


String regex = "\\?|\\*";
Pattern pattern = Pattern.compile(regex);
String[] splitStrs = pattern.split("123?123*456*456");//123 123 456 456
String[] splitStrs2 = pattern.split("123?123*456*456", 2);// 123 123*456*456
  • 1
  • 2
  • 3
  • 4
  • Pattern.quote(String s) 返回给定的字符串的字面量,关于方法的具体信息请参考123

String pattern = Pattern.quote("1252343% 8 567 hdfg gf^$545");
System.out.println("Pattern is : "+pattern);
  • 1
  • 2

输出信息:

Pattern is : \Q1252343% 8 567 hdfg gf^$545\E

  • matches()方法编译给定的正则表达式并且对输入的字串以该正则表达式为模开展匹配,该方法适合于该正则表达式只会使用一次的情况,也就是只进行一次匹配工作,因为这种情况下并不需要生成一个Matcher实例.

String regex = "\\?|\\*";
Pattern pattern = Pattern.compile(regex);
boolean matches = pattern.matches(regex, "?");//返回true
  • 1
  • 2
  • 3

Matcher类

常用方法及介绍

  • boolean matches() 最常用方法:尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值.
Pattern pattern = Pattern.compile("\\?{2}");
Matcher matcher = pattern.matcher("??");
boolean matches = matcher.matches();//true
System.out.println(matches);
matcher=pattern.matcher("?");
matches = matcher.matches();//false
System.out.println(matches);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • boolean lookingAt() 对前面的字符串进行匹配,只有匹配到的字符串在最前面才会返回true
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("22bb23");
boolean match = m.lookingAt();//true
System.out.println(match);
m = p.matcher("bb2233");
match= m.lookingAt();
System.out.println(match);//false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • boolean find() 对字符串进行匹配,匹配到的字符串可以在任何位置
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • int start() 返回当前匹配到的字符串在原目标字符串中的位置
  • int end() 返回当前匹配的字符串的最后一个字符在原目标字符串中的索引位置.
  • String group() 返回匹配到的子字符串 
    Pattern.start(),Pattern.end(),Pattern.group()代码示例
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("aa22bb23");
m.find();
int start = m.start();//2
String group = m.group();//22
int end = m.end();//4
System.out.println(start);
System.out.println(group);
System.out.println(end);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

还有一些其他常用的方法,请参考API自行学习或者参考其他博客.

参考博客: 
1. http://www.cnblogs.com/playing/archive/2011/03/15/1984943.html 
2. http://blog.csdn.net/cclovett/article/details/12448843 
3. http://www.blogjava.net/jayslong/archive/2011/04/21/embeded_flag_expressions_in_java_regex.html

Java正则表达式Pattern和Matcher类详解相关推荐

  1. java matcher遍历_java正则表达式之Pattern与Matcher类详解

    Pattern.split方法详解 /** * 测试Pattern.split方法 */ @Test public void testPatternSplit() { String str = &qu ...

  2. Java 正则表达式 Pattern和Matcher类 Math类 Random类 System类 BigDecimal类

    14.01_正则表达式 A:正则表达式:正确规则的表达式,规则java给我们定的.指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则,有自己特殊的应用.B:组成规则:规 ...

  3. Java正则表达式及Pattern与Matcher使用详解

    文章目录 一.正则表达式详解 1.符号定义 (1)基本书写符号 (2)限定符 (3)匹配字符集 (4)分组构造 (5)字符转义 2.常用正则表达式举例 3.Java中RegularExpression ...

  4. matcher java_Java Matcher类详解

    首页 > 基础教程 > 正则表达式 > Matcher类 Java Matcher类详解 Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查, ...

  5. Java并发编程之Thread类详解

    Thread类详解: 线程(Thread): 是操作系统进行调度的最小单位,Java中的线程是对操作系统线程的封装.本文从线程的创建到停止结合代码和具体实例分析一下关于java线程的一些常见问题. 线 ...

  6. JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  7. JAVA正则表达式:Pattern类与Matcher类详解

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  8. java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解

    以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1        ((A) ...

  9. java中正则表达式Pattern与Matcher类使用详解(find、group)

    一.Pattern的使用 这个使用很简单. 1.把正则表达式编译为Pattern对象: 比如: Pattern compile = Pattern.compile("http://([a-z ...

最新文章

  1. 路径规划(Path Planning)与运动规划(Motion Planning)
  2. xx是一个类型 这在给定的上下文_基于上下文的派发:挂起临时变量内存
  3. python 地址模糊匹配_使用python处理selenium中的xpath定位元素的模糊匹配问题
  4. 提高你开发效率的十五个Visual Studio 2010使用技巧
  5. boost::bind 介绍
  6. ftp shell lcd不起作用
  7. release,debug库互调用,32位,64位程序与库互调用
  8. linux 切换root_Linux运维服务篇:流量监控工具iftop部署及详细参数分享
  9. 【架构师】【数据库基础】【笔记 01】快速了解数据库系统的重要概念01
  10. app用html传数据,通过html调用App并传送参数倒App中
  11. C语言实现简单学籍管理系统
  12. 广州新一代域名注册量动态:11月下旬净增3425个
  13. git 停止维护了,官网无法下载
  14. php表单验证插件下载,强力推荐10款Javascript表单验证插件
  15. Linux下tomcat 8安装与配置
  16. 映泰G31计算机主板进入BIOS,映泰主板bios设置方法
  17. 图解项目绩效考核表实例--绩效考核不用愁
  18. QT Libvlc视频画面上覆盖透明控件
  19. 比较两个数或者三个数的大小,输出较大数的值 Java
  20. 光子晶体介质柱的讨论

热门文章

  1. 求几款android的软件,+你懂的!!!,全干货!安卓用户不得不知道的逆天神器APP
  2. 平面几何----阿基米德折弦定理或中点定理的证明
  3. 教你6招快速美白牙齿
  4. RK 平台MIPI 点屏注意事项
  5. Staking 生态大会后,大佬们都去哪儿了?
  6. 【网络信息安全】网络安全与信息安全的关系
  7. 60+ 个前端常用插件库合集
  8. 墨菲定律、二八法则、马修、手表定理、“不肖”法、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原则、钱的问题、奥卡姆剃刀等。13文章是关于生活的金科玉律...
  9. 开源社区推广相关(七)|关于建立PostgreSQL内核开发交流群及内核开发资料分享git仓库的说明
  10. 加拿大程序员趣闻系列 3/N : 生活篇