上一节我们学习了使用Pattern类和Matcher类的第一步,建立模式对象,这一节我们继续学习第二步,得到匹配对象。
得到可以检索字符串input的Matcher类的实例matcher,称为匹配对象:
Matcher matcher = pattern.matcher(input);
模式对象pattern调用matcher(CharSequence input)方法返回一个Matcher对象matcher,称为匹配对象,参数input用于给出matcher要检索的字符串。参数input可以是任何一个实现了CharSequence接口的类创建的对象,前面学习的String类和StringBuffer类都实现了CharSequence接口。
匹配对象matcher就可以调用各种方法检索字符串input。例如:matcher依次调用boolean find()方法将检索到input中和regex匹配的子字符串。例如:首次调用find()方法将检索到input中的第一个子字符串good,即matcher.find()检索到第一个good并返回true,这时matcher.start()返回的值是6,第一个good开始的位置, matcher.end()返回的值是10,第一个good结束的位置,matcher.group()返回good,也就是说,返回检索到的字符串。
Matcher对象matcher可以使用下列方法寻找字符串input中是否有和模式regex匹配的子序列,regex是创建模式对象pattern时使用的正则表达式。
1)public boolean find()
寻找input和regex匹配的下一子序列,如果成功该方法返回true,否则返回false。matcher首次调用该方法时,寻找input中第1个和regex匹配的子序列,如果find()返回true, matcher再调用find()方法时,就会从上一次匹配模式成功的子序列后开始寻找下一个匹配模式的子字符串。另外,当find方法返回true时,matcher可以调用start()方法和end方法可以得到该匹配模式子序列在input中的开始位置和结束位置。当find方法返回true时,matcher调用group()可以返回find方法本次找到的匹配模式的子字符串。
2)public boolean matches()
matcher调用该方法判断input是否完全和regex匹配。
3)public boolean lookingAt()
matcher调用该方法判断从input的开始位置是否有和regex匹配的子序列。若lookingAt()方法返回true,matcher调用start()方法和end方法可以得到lookingAt()方法找到的匹配模式的子序列在input中的开始位置和结束位置。若lookingAt()方法返回true,matcher调用group()可以返回lookingAt()方法找到的匹配模式的子序列。
4)public boolean find(int start)
matcher调用该方法判断input从参数start指定位置开始是否有和regex匹配的子序列,参数start取值0时,该方法和lookingAt()的功能相同。
5)public String replaceAll(String replacement)
matcher调用该方法可以返回一个字符串,该字符串是通过把input中与模式regex匹配的子字符串全部替换为参数replacement指定的字符串得到的,需要注意的是,input本身没有发生变化。
6)public String replaceFirst(String replacement)
matcher调用该方法可以返回一个字符串,该字符串是通过把input中第1个与模式regex匹配的子字符串替换为参数replacement指定的字符串得到的,需要注意的是,input本身没有发生变化。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程