版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/woaigaolaoshi/article/details/50970527
                                        <div class="markdown_views"><!-- flowchart 箭头图标 勿删 --><svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><p>Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现</p>

Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态方法创建:compile(String regex)和compile(String regex,int flags),其中regex是正则表达式,flags为可选模式(如:Pattern.CASE_INSENSITIVE 忽略大小写)

实例:

Pattern pattern = Pattern.compile("Java");
System.out.println(pattern.pattern());//返回此模式的正则表达式即Java
  • 1
  • 2

Pattern类还有两个根据匹配模式拆分输入序列的方法:split(CharSequence input) 和split(CharSequence input, int limit),其中limit为返回元素的个数。

实例:

Pattern pattern = Pattern.compile("Java");
String test="123Java456Java789Java";
String[] result = pattern.split(test);
for(String s : result)System.out.println(s);
  • 1
  • 2
  • 3
  • 4
  • 5

结果:

在细说一下split(CharSequence input, int limit),当limit值大于所能返回的字符串的最多个数或者为负数,返回的字符串个数将不受限制,但结尾可能包含空串,而当limit=0时与split(CharSequence input)等价,但结尾的空串会被丢弃。

Pattern pattern = Pattern.compile("Java");
String test = "123Java456Java789Java";String[] result = pattern.split(test,2);
for(String s : result)System.out.println(s);result = pattern.split(test,10);
System.out.println(result.length);result = pattern.split(test,-2);
System.out.println(result.length);result = pattern.split(test,0);
System.out.println(result.length);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行结果:

Pattern类也自带一个静态匹配方法matches(String regex, CharSequence input),但只能进行全字符串匹配并且只能返回是否匹配上的boolean值

实例:

String test1 = "Java";
String test2 = "Java123456";System.out.println(Pattern.matches("Java",test1));//返回true
System.out.println(Pattern.matches("Java",test2));//返回false
  • 1
  • 2
  • 3
  • 4
  • 5

最后就要过渡到Matcher类了,Pattern类中的matcher(CharSequence input)会返回一个Matcher对象。

Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持,要想得到更丰富的正则匹配操作,那就需要将Pattern与Matcher联合使用。

实例:

Pattern pattern = Pattern.compile("Java");
String test = "123Java456Java789Java";
Matcher matcher = pattern.matcher();
  • 1
  • 2
  • 3

Matcher类提供了三个返回boolean值得匹配方法:matches(),lookingAt(),find(),find(int start),其中matches()用于全字符串匹配,lookingAt从字符串最开头开始匹配满足的子串,find可以对任意位置字符串匹配,其中start为起始查找索引值。

实例

Pattern pattern = Pattern.compile("Java");
String test1 = "Java";
String test2 = "Java1234";
String test3 = "1234Java"
Matcher matcher = pattern.matcher(test1);
System.out.println(matcher.matches());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.matches());//返回falsematcher = pattern.matcher(test2);
System.out.println(matcher.lookingAt())://返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.lookingAt());//返回falsematcher = pattern.matcher(test1);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(2));//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(5));//返回false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这里介绍下组的概念:组是用括号划分的正则表达式,可以根据组的编号来引用这个组。组号为0表示整个表达式,组号为1表示被第一对括号括起的组,依次类推,例如A(B(C))D,组0是ABCD,组1是BC,组2是C。

Matcher类提供了start(),end(),group()分别用于返回字符串的起始索引,结束索引,以及匹配到到的字符串。

实例:

Pattern pattern = Pattern.compile("Java");
String test = "123Java456";Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.start());//返回3
System.out.println(matcher.end());//返回7
System.out.println(matcher.group());//返回Java
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Matcher类提供了start(int gropu),end(int group),group(int i),groupCount()用于分组操作

实例:

Pattern pattern = Pattern.compile("(Java)(Python)");
String test = "123JavaPython456";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.groupCount());//返回2System.out.println(matcher.group(1));//返回第一组匹配到的字符串"Java",注意起始索引是1
System.out.println(matcher.start(1));//返回3,第一组起始索引
System.out.println(matcher.end(1));//返回7 第一组结束索引System.out.println(matcher.group(2));//返回第二组匹配到的字符串"Python"
System.out.println(matcher.start(2));//返回7,第二组起始索引
System.out.println(matcher.end(2));//返回13 第二组结束索引
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Matcher类还提供region(int start, int end)(不包括end)方法用于设定查找范围,并提供regionStrat()和regionEnd()用于返回起始和结束查找的索引

Pattern pattern = Pattern.compile("Java");String test = "123JavaJava";Matcher matcher = pattern.matcher(test);matcher.region(7, 11);System.out.println(matcher.regionStart());//返回7System.out.println(matcher.regionEnd());//返回11matcher.find();System.out.println(matcher.group());//返回Java
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Matcher类提供了两种用于重置当前匹配器的方法:reset()和reset(CharSequence input)

Pattern pattern = Pattern.compile("Java");String test = "Java";Matcher matcher = pattern.matcher(test);matcher.find();System.out.println(matcher.group());//返回Javamatcher.reset();//从起始位置重新匹配matcher.find();System.out.println(matcher.group());//返回Javamatcher.reset("Python");System.out.println(matcher.find());//返回false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

最后说一下Matcher类的匹配方法:replaceAll(String replacement) 和 replaceFirst(String replacement),其中replaceAll是替换全部匹配到的字符串,而replaceFirst仅仅是替换第一个匹配到的字符串。

Pattern pattern = Pattern.compile("Java");String test = "JavaJava";Matcher matcher = pattern.matcher(test);System.out.println(matcher.replaceAll("Python"));//返回PythonPythonSystem.out.println(matcher.replaceFirst("python"));//返回PythonJava
  • 1
  • 2
  • 3
  • 4
  • 5

还有两个方法appendReplacement(StringBuffer sb, String replacement) 和 appendTail(StringBuffer sb)也很重要,appendReplacement允许直接将匹配的字符串保存在另一个StringBuffer中并且是渐进式匹配,并不是只匹配依次或匹配全部,而appendTail则是将未匹配到的余下的字符串添加到StringBuffer中。

    Pattern pattern = Pattern.compile("Java");Matcher matcher = pattern.matcher("Java1234");
System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(matcher<span class="hljs-preprocessor">.find</span>())<span class="hljs-comment">;//返回true</span>
StringBuffer sb = new StringBuffer()<span class="hljs-comment">;</span>matcher<span class="hljs-preprocessor">.appendReplacement</span>(sb, <span class="hljs-string">"Python"</span>)<span class="hljs-comment">;</span>
System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(sb)<span class="hljs-comment">;//输出Python</span>matcher<span class="hljs-preprocessor">.appendTail</span>(sb)<span class="hljs-comment">;</span>
System<span class="hljs-preprocessor">.out</span><span class="hljs-preprocessor">.println</span>(sb)<span class="hljs-comment">;//输出Python1234</span></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>            </div>

Pattern和Matcher用法相关推荐

  1. java pattern用法_Java Pattern和Matcher用法

    Pattern用法 Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现 Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态 ...

  2. 我爱学Java之Pattern和Matcher用法

    Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现 Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态方法创建:compi ...

  3. matcher java_Java Pattern和Matcher用法

    Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现 Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态方法创建:compi ...

  4. JAVA Pattern和Matcher 的用法

    2019独角兽企业重金招聘Python工程师标准>>> String上可使用正则表达式的操作,实际上是利用了java.util.regex.Pattern与java.util.reg ...

  5. java pattern matcher_JAVA中Pattern和Matcher的用法

    Pattern和Matcher String上可使用正则表达式的操作,实际上是利用了java.util.regex.Pattern与java.util.regex.Matcher的功能.当调用Stri ...

  6. Java基础 正则表达式 Pattern和Matcher

    主要用途:    通常正则表达式都是用来判断输入的字符串是否符合自己的要求. 在Java中主要用到的是java.utill.regex包下的类: 这里面主要用到的就是Pattern和Matcher两个 ...

  7. Java之Pattern和Matcher的作用

    java.util.regex.Pattern类的实例的主要作用是给正则表达式一个匹配模式,因为在java里面正则表达式是一个字符串,字符串的能力是非常有限的,不像javascript那样可以在正则表 ...

  8. 正则表达式 Pattern 、Matcher

    一 Pattern和Matcher 1.1 相关 在使用正则表达式之前我们需了解Pattern和Matcher,为什么要了解他们呢? 他们用来解决String不能解决的问题,是很实用切强大的正则表达式 ...

  9. java.util.regex包下的Pattern和Matcher详解(正则匹配)

    java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果 ...

最新文章

  1. Spring Boot处理静态资源(自定义资源映射)
  2. MapReduce 在Shuffle阶段 内存溢出原因分析及处理方法
  3. mysql查一个表3到5行的数据类型_MySQL入门(三) 数据库表的查询操作【重要】
  4. Bootstrap Table事件
  5. LeetCode刷题——91. 解码方法
  6. jsp和java一样具有平台独立性._web开发技术总复习题
  7. Python教学视频(四)输入语句和基础算术运算符
  8. 唐宇迪opencv-背景建模
  9. php openssl 处理pkcs8,openssl生成RSA格式私钥,转换为通用型PKCS8格式
  10. 【嵌入式模块】ESP8266完整教程
  11. 互联网公司的“江湖绰号”盘点,你知道几个?
  12. 1KB文件夹快捷方式病毒解决方法
  13. 超立方体结构图计算机系统,科学网—超立方体或将构成纳米计算机
  14. 201709-2公共钥匙盒
  15. V型反弹的名场面,荣耀能否在海外市场“荣耀”?
  16. 双链路是什么意思_实时备份什么意思
  17. 企业网站建设改版的未来方向
  18. 关于我遇到的一个DNS问题
  19. InnoDB执行delete时到底做了什么?
  20. 诺奖终属黑洞理论-IT与物理的相互成就

热门文章

  1. 利用 latex 将png 转化为 eps 格式
  2. 厉害的初二男生!为外婆发明认人神器,帮认亲人,20分钟召唤回家,并报出家庭地址...
  3. 8个国外矢量图案下载网站
  4. python中的复制、浅拷贝和深拷贝的区别
  5. 包邮送新款笔记本电脑,也可折现
  6. JS 中的事件委托是什么?
  7. 测鬼记(上)——报到(二)
  8. 使用poi操作excel详解
  9. 计算机设计大赛校赛答辩后的感想和反思
  10. 垃圾回收器与内存分配策略