在Matcher类中有matches、lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下:

  • matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动下次匹配的位置。
  • lookingAt:部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。
  • find:部分匹配,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置。
  • reset:给当前的Matcher对象配上个新的目标,目标是就该方法的参数;如果不给参数,reset会把Matcher设到当前字符串的开始处。

使用示例代码来展示他们的区别更清晰明了:

package net.oseye;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class IOTest {public static void main(String[] args){Pattern pattern = Pattern.compile("\\d{3,5}");String charSequence = "123-34345-234-00";Matcher matcher = pattern.matcher(charSequence);//虽然匹配失败,但由于charSequence里面的"123"和pattern是匹配的,所以下次的匹配从位置4开始print(matcher.matches());//测试匹配位置matcher.find();print(matcher.start());//使用reset方法重置匹配位置matcher.reset();//第一次find匹配以及匹配的目标和匹配的起始位置print(matcher.find());print(matcher.group()+" - "+matcher.start());//第二次find匹配以及匹配的目标和匹配的起始位置print(matcher.find());print(matcher.group()+" - "+matcher.start());//第一次lookingAt匹配以及匹配的目标和匹配的起始位置print(matcher.lookingAt());print(matcher.group()+" - "+matcher.start());//第二次lookingAt匹配以及匹配的目标和匹配的起始位置print(matcher.lookingAt());print(matcher.group()+" - "+matcher.start());}public static void print(Object o){System.out.println(o);}
}

输出结果:

false
4
true
123 - 0
true
34345 - 4
true
123 - 0
true
123 - 0

因为看不懂   (?<=    学了点

(?:pattern)

非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

(?=pattern)

非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern)

非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。

(?<=pattern)

非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。

(?

非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?

Java中正则Matcher类的matches()、lookAt()和find()的区别相关推荐

  1. Java中正则Matcher类的matches()、lookAt()和find()的差别

    參考博文地址:http://www.oseye.net/user/kevin/blog/170 1.matcher():仅仅有在整个字符串全然匹配才返回true,否则返回false. 可是假设部分匹配 ...

  2. java中的正则表达式类---表情转换实例

    Java中的正则表达式类 ________________________________________ public interface MatchResult 匹配操作的结果. 此接口包含用于确 ...

  3. JAVA基础(12.Java中的常用类String)

    目录 1.前言 2.日期(时间)相关类 2.1 日期类的应用场景 2.1.1Java中的日期相关的几个类 3. Java中的常用类学习方式 3.1 什么是常用类?为什么要学习? 3.2 怎么使用Jav ...

  4. java matcher函数,Java中的Matcher regionStart()方法与示例

    java.util.regex.Matcher类表示执行各种匹配操作的引擎.该类没有构造函数,可以使用类java.util.regex.Pattern的matchs()方法创建/获取该类的对象. 这个 ...

  5. java 中常用的类

    java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l  static double abs(double  a) 获取double 的绝对值 l  sta ...

  6. Java中的BigDecimal类你真的了解吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...

  7. Java中常用的类及其特点

    Java中的内部类有四种(内部类作用1.封装装类型. 2.直接访问外部类成员. 3.回调.)内部类,方便他们的外部类调用,一般不会被其它类使用,比如事件监听器之类的,外部类刚好继承了一个别的类,如果你 ...

  8. java中的stack类和C++中的stack类的区别

    文章目录 1 java中的stack类和C++中的stack类的区别 1.1 java中的stack类 1.2 C++中的stack类 1.3 分析 不经意间想到了这个问题,存到栈中的是对象的引用,还 ...

  9. Java 中的 BigDecimal 类你了解多少?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 作者:HikariCP 链接: ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第7期)
  2. 小程序使用wxParse解析html
  3. web公选课第三节2020.5.18
  4. SQL server Cannot find one or more
  5. Entity Framework Core 软删除与查询过滤器
  6. ros c++ 代码说明文档_减少运维工作量,如何通过 ROS 轻松实现资源编排新方式...
  7. java内存shell_Springboot 内存shell
  8. 微课|中学生可以这样学Python(例5.1):生成不重复的随机数
  9. QObject::startTimer: Timers cannot be started from another thread
  10. Linux基础——Linux 基本指令 nano 和 cat
  11. python合并excel某一列内容_使用Python横向合并excel文件的实例
  12. Linux实验四:文件的压缩
  13. N-BaIoT-Network-based-Detection-of-IoT-Botnet-Attacks
  14. mysql8安装错误,Windows安装MySQL8.0.16 的步骤及出现错误问题解决方法
  15. Scroller的用法
  16. iphone开发中内存利用说明
  17. windows/ps使用技巧
  18. 骁龙768g和765g的差距大不大
  19. android强制缓存写磁盘,Android缓存之DiskLruCache磁盘缓存的使用
  20. php解包封包,PHP解包数组

热门文章

  1. tensorflow.keras.models.Sequential——predict()、predict_classes()、predict_proba()方法的区别
  2. 存在的多个逻辑与()和逻辑或(||)的执行顺序
  3. API-fox 接口神器
  4. JavaScript 求平均数的方法(实参个数不确定)
  5. Android解析XML的三种方式
  6. 技术总监经验总结: 从需求到上线之用户故事地图
  7. java字符串长度(java字符串长度压缩)
  8. 侧扫声纳内业处理--基于HYPACK2018
  9. JFS与JFS2的区别
  10. android如何拨打电话