我爱学Java之Pattern和Matcher用法
Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现
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
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);
结果:
在细说一下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);
运行结果:
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
最后就要过渡到Matcher类了,Pattern类中的matcher(CharSequence input)会返回一个Matcher对象。
Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持,要想得到更丰富的正则匹配操作,那就需要将Pattern与Matcher联合使用。
实例:
Pattern pattern = Pattern.compile("Java");
String test = "123Java456Java789Java";
Matcher matcher = pattern.matcher();
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
这里介绍下组的概念:组是用括号划分的正则表达式,可以根据组的编号来引用这个组。组号为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
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 第二组结束索引
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
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
最后说一下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
还有两个方法appendReplacement(StringBuffer sb, String replacement) 和 appendTail(StringBuffer sb)也很重要,appendReplacement允许直接将匹配的字符串保存在另一个StringBuffer中并且是渐进式匹配,并不是只匹配依次或匹配全部,而appendTail则是将未匹配到的余下的字符串添加到StringBuffer中。
Pattern pattern = Pattern.compile("Java");Matcher matcher = pattern.matcher("Java1234");System.out.println(matcher.find());//返回trueStringBuffer sb = new StringBuffer();matcher.appendReplacement(sb, "Python");System.out.println(sb);//输出Pythonmatcher.appendTail(sb);System.out.println(sb);//输出Python1234
我爱学Java之Pattern和Matcher用法相关推荐
- Java 正则表达式 Pattern和Matcher类 Math类 Random类 System类 BigDecimal类
14.01_正则表达式 A:正则表达式:正确规则的表达式,规则java给我们定的.指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则,有自己特殊的应用.B:组成规则:规 ...
- java pattern用法_Java Pattern和Matcher用法
Pattern用法 Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现 Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态 ...
- java中Pattern和Matcher的使用
我们的字符串String类中包含了正则的匹配.字符的替换等操作,但是,有的时候String的正则匹配不能够满足要求就需要用到Pattern和Matcher类 import java.util.rege ...
- Java之Pattern和Matcher的作用
java.util.regex.Pattern类的实例的主要作用是给正则表达式一个匹配模式,因为在java里面正则表达式是一个字符串,字符串的能力是非常有限的,不像javascript那样可以在正则表 ...
- java正则表达式Pattern和Matcher
Pattern和Matcher java.util.regex 包(处理正则表达式) 提供了两个用来处理正则表达式的工具类:Pattern和Matcher.Pattern用于建立待匹配的正则表达式模型 ...
- matcher java_Java Pattern和Matcher用法
Java正则表达式通过java.util.regex包下的Pattern和Matcher类实现 Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态方法创建:compi ...
- Pattern和Matcher用法
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/woaigaolaoshi/article/details/50970527 <div clas ...
- Java正则表达式Pattern和Matcher类详解
转载自:http://blog.csdn.net/yin380697242/article/details/52049999 概述 Pattern类的作用在于编译正则表达式后创建一个匹配模式. Mat ...
- 2017-2018-1 我爱学Java 第一周 作业
构建之法 成员及分工 内容简介 作者简介 分章学习及问题 第一章 概论 第二章 个人技术和流程 第三章 软件工程师的成长 第四章 两人合作 第五章 团队和流程 第六章 敏捷流程 第七章 实战中的软件工 ...
最新文章
- 在Android中使用Android Ksoap2调用WebService
- 前端控制器html,DispatcherServlet(前端控制器)访问顺序和url匹配规则
- 【C++ 语言】 C 与 C++ 兼容 ( extern C )
- 游戏玩家行为基本模式的初探小汇
- java程序如何优化--技巧总结
- selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
- 在vs2005中使用Com连接SAP系统(一)
- 重磅 | 激活数据价值 阿里云推出云原生数据库备份DBS新版本
- CodeForces - 1341E Nastya and Unexpected Guest(01bfs)
- Spring Boot @EnableAutoConfiguration和 @Configuration的区别
- CentOS thrift python demo
- Egret入门学习日记 --- 第十篇(书中 2.9~2.13节 内容)
- oracle查询多个加锁,解析oracle对select加锁的方法以及锁的查询 转
- 全网最细最全Appium自动化测试 iOS入门教程,App自动化测试教程,精细整理
- 基于VHDL语言分频器电路程序设计
- dnf 服务器喇叭怎么制作,DNF服务器喇叭要删除了吗 服务器喇叭删除后怎么聊天...
- java8分组lambda_Java 8,Lambda:在分组列表中排序并将所有组合并到列表中
- html图片与文字的排版6,前端开发学习笔记(六)- Css 文字排版
- 构建一个属于自己的centos7-php80-swoole的Docker镜像
- 天翼宽带政企网关B2-1P 如何获得超级管理员账号?