java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现. Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,
Java代码示例: Pattern p=Pattern.compile("\\w+");
p.pattern();//返回 \w+ 

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

1、Pattern.split(CharSequence input)
 Pattern有一个split(CharSequence input)方法,用于分隔字符串,并返回一个String[].
Java代码示例:

Pattern p=Pattern.compile("\\d+");
String[] str=p.split("TestPattern97Matcher"); 

结果:str[0]="TestPattern" str[1]="Matcher"

2、Pattern.matcher(String regex,CharSequence input)是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.
Java代码示例:

Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 

3、Pattern.matcher(CharSequence input)
Pattern.matcher(CharSequence input)返回一个Matcher对象.
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
Java代码示例:

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的 

4、Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
Matcher 类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false

matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
Matcher m2=p.matcher("2223");
m2.matches();//返回true,因为\d+匹配到了整个字符串 

在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配
即Pattern.matcher("\\d+","22bb23")与 Pattern.compile("\\d+").matcher("22bb23").matches()  等价

lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.lookingAt();//返回true,因为\d+匹配到了前面的22
Matcher m2=p.matcher("aa2223");
m2.lookingAt();//返回false,因为\d+不能匹配前面的aa 

find()对字符串进行匹配,匹配到的字符串可以在任何位置.

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.find();//返回true
Matcher m2=p.matcher("aa2223bb");
m2.find();//返回true
Matcher m3=p.matcher("aabb");
m3.find();//返回false 

find(int start) 从指定索引开始匹配

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("aa2223bb");
m.find(5); // 返回true
m.find(6); // 返回false

5、Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("aaa2223bb");
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223后的索引号
m.group();//返回2223
Mathcer m2=m.matcher("2223bb");
m.lookingAt();   //匹配2223
m.start();   //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
m.end();   //返回4
m.group();   //返回2223
Matcher m3=m.matcher("2223bb");
m.matches();   //匹配整个字符串
m.start();   //返回0,原因相信大家也清楚了
m.end();   //返回6,原因相信大家也清楚了,因为matches()需要匹配所有字符串
m.group();   //返回2223bb

start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.

Pattern p=Pattern.compile("([a-z]+)(\\d+)");
Matcher m=p.matcher("aaa2223bb");
m.find();   //匹配aaa2223
m.groupCount();   //返回2,因为有2组
m.start(1);   //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2);   //返回3
m.end(1);   //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2);   //返回7
m.group(1);   //返回aaa,返回第一组匹配到的子字符串
m.group(2);   //返回2223,返回第二组匹配到的子字符串 

现在我们使用一下稍微高级点的正则匹配操作,例如有一段文本,里面有很多数字,而且这些数字是分开的,我们现在要将文本中所有数字都取出来,利用java的正则操作是那么的简单.
Java代码示例:

Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");
while(m.find()) {System.out.println(m.group());
}

输出:
456456
0532214
123

如将以上while()循环替换成

while(m.find()) {System.out.println(m.group());System.out.print("start:"+m.start());System.out.println(" end:"+m.end());
} 

则输出:
456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39

现在大家应该知道,每次执行匹配操作后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串的信息,以及它们的重载方法,也会改变成相应的信息.

注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用.

文章参考 :http://blog.csdn.net/kofandlizi/article/details/7323863

java 字符串模糊匹配相关推荐

  1. java 字符串模糊匹配_Java实现伪查询(全匹配+模糊匹配)

    Java实现伪查询(全匹配+模糊匹配) 在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱 ...

  2. python模糊查询_python实现字符串模糊匹配

    之前笔者写过一篇文章关于如何做搜索,但那篇文章的角度是从文本相似度角度写的.那种方式是目前发展的趋势,但是真正的搜索特别是网页搜索不可能在大范围的文本之间两两算相似度的.那样搜索引擎的效率会变得特别低 ...

  3. Python字符串模糊匹配库FuzzyWuzzy

    Python字符串模糊匹配库FuzzyWuzzy 在计算机科学中,字符串模糊匹配(fuzzy string matching)是一种近似地(而不是精确地)查找与模式匹配的字符串的技术.换句话说,字符串 ...

  4. JS实现字符串模糊匹配

    JS实现字符串模糊匹配 var str = "徐娜xuanchengwush数据uc是hulichang" var key = "徐娜数据g" // 模糊匹配 ...

  5. python字符串模糊匹配 - FuzzyWuzzy

    简介 字符串模糊匹配在很多问题中有实际价值.比如NER或任何词条关联问题,将不规范的词条与标准词条进行链接匹配.在数据量大或包含关系复杂时,使用优秀的工具包可极大提升效率. FuzzyWuzzy 既是 ...

  6. python字符串模糊匹配 - RapidFuzz

    简介 之前已介绍了字符串模糊匹配的应用以及FuzzyWuzzy包的使用.目前使用较多的是运行速度更快的RapidFuzz,从名字即可看出其特点.RapidFuzz是一个使用python和C++编写的字 ...

  7. python字符串模糊匹配_NLP教程:用Fuzzywuzzy进行字符串模糊匹配

    在计算机科学中,字符串模糊匹配( fuzzy string matching)是一种近似地(而不是精确地)查找与模式匹配的字符串的技术.换句话说,字符串模糊匹配是一种搜索,即使用户拼错单词或只输入部分 ...

  8. java 字符串文本匹配并高亮显示处理

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  9. mybatis字符串模糊匹配

    1.  参数中直接加入%%,注意不需要加两个单引号,加了就会出错,因为系统会自动为字符串类型加上两个单引号 <select id="selectPersons" result ...

最新文章

  1. Xamarin iOS开发实战上册-----2.2.2 使用代码添加视图
  2. hdfs的实验总结_实验2-熟悉常用的HDFS操作.doc
  3. mybatis主键生成策略和mp主键生成策略
  4. 遇见好链接(我还并没有看)
  5. UI设计师必收藏的上百种配色方案专辑!
  6. gitlab根据hook钩子自动化部署
  7. python3 中bytes与str类型
  8. LeetCode刷题——11. 盛最多水的容器
  9. 没学过JavaScript也能看懂的闭包解释
  10. 一步步学习SPD2010--附录B--创建新的批准流程
  11. 深度学习涉及到的高等数学知识点总结
  12. Go 实现自举的具体含义
  13. python小孩的报酬_孩子怎么区分报酬与奖励
  14. @Value 注解用法
  15. android流光字体实现,【流光算法代码实现】Demo
  16. Android中半圆形背景
  17. vs2010 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  18. iot架构 mqtt netty_百度IoT:MQTT Broker架构设计
  19. 洛谷-P1498 南蛮图腾
  20. 奇妙的AE特效插件之红巨人粒子特效Trapcode Suite

热门文章

  1. php一维数组的定义,PHP 数组定义、遍历的实现方法
  2. 薅羊毛 | Python 自动化带你轻松赚钱
  3. 音箱选购必备20秘诀
  4. 怎么从主机拷贝文件到虚拟机
  5. 萃余液P507/P204除油工艺
  6. sql根据指定符号拆分字符串表函数
  7. 苹果平板怎么卸载软件_苹果卸载软件功能
  8. 深度!用“极速统一”,开启金融行业数据分析新范式
  9. read()函数:读文件函数
  10. rmmod: can't change directory to '/lib/modules': No such file or directory