matcher java_Java Pattern和Matcher用法

matcher java_Java Pattern和Matcher用法Java 正则表达式通过 java util regex 包下的 Pattern 和 Matcher 类实现 Pattern 类用于创建一个正则表达式 也可以说是创建一个匹配模式 可以通过两个静态方法创建 compile Stringregex 和 compile Stringregex intflags 其中 regex 是正则表达式 flags 为可选模式 如 Pattern CASE INSENSITIVE

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);

结果:

123

456

789

再细说一下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);

运行结果:

Java789Java4

4

3

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

实例:

String test1 = “Java”;

String test2= “Java”;

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());//返回false

matcher=pattern.matcher(test2);

System.out.println(matcher.lookingAt())://返回true

matcher =pattern.matcher(test3);

System.out.println(matcher.lookingAt());//返回false

matcher=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());//返回2

System.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());//返回7

System.out.println(matcher.regionEnd());//返回11

matcher.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());//返回Java

matcher.reset();//从起始位置重新匹配

matcher.find();

System.out.println(matcher.group());//返回Java

matcher.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”));//返回PythonPython

System.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());//返回true

StringBuffer sb = newStringBuffer();

matcher.appendReplacement(sb,”Python”);

System.out.println(sb);//输出Python

matcher.appendTail(sb);

System.out.println(sb);//输出Python1234

———————

摘抄学习,出处如下:

作者:Java.Sheng

来源:CSDN

原文:https://blog.csdn.net/woaigaolaoshi/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224953.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午10:46
下一篇 2026年3月17日 上午10:46


相关推荐

  • 开源 java CMS – FreeCMS2.8 数据对象 user

    开源 java CMS – FreeCMS2.8 数据对象 user

    2021年7月3日
    66
  • 国产linux操作系统深度系统20.3发布(推荐)

    国产linux操作系统深度系统20.3发布(推荐)深度操作系统(deepin)是一个致力于为全球用户提供美观易用、安全稳定服务的Linux发行版,同时也一直是排名最高的来自中国团队研发的Linux发行版。(了解deepin国际排名)深度操作系统20.3,升级Stable内核到5.15版本,进一步提升兼容性。修复系统安全漏洞,增强安全性。部分深度应用新增及优化常用功能,满足不同场景下的使用需求。针对桌面环境部分问题修复及优化,只为带来更好体验。更强大的内核版本Stable内核升级到5.15版本,增强对Intel12代U和NTFS文件系统的支

    2022年5月16日
    46
  • latex 希腊字母表_物理希腊字母

    latex 希腊字母表_物理希腊字母因为有时候用到希腊字母时总会忘了读音或拼写,所以自己整理了一份表格,分别罗列了常用希腊字母的大小写,音标以及如何用LaTex公式书写出来。详见下表:希腊字母大写小写小写公式音标(美式)备注AAα\alpha\alpha/ˈælfə/大写为A,看上去是英文大写的其实就直接英文大写就行,下同BBβ\beta\beta/ˈb

    2022年8月31日
    5
  • java工资多少 程序员薪资很高吗?

    java工资多少 程序员薪资很高吗?北京程序员平均工资是12715元,和此相差无几的是上海、深圳。达内是专业做精英程序员人才招聘的。据调查可知:在工作年限上,3-5年的工程师平均薪酬是20K上下。而5年以后的工程师薪酬有了明显的上升,30K上下也是必须的。程序员的薪资都很高么,java程序员的薪资是多少呢?java新手工资一般多少?程序猿在世人眼里已经成为高薪、为人忠诚的代名词。然而,达内小编要说的是,不是所有的程序员工…

    2022年7月8日
    212
  • 百度的手机“龙虾”上线秒光,OpenClaw创始人邀共同开发

    百度的手机“龙虾”上线秒光,OpenClaw创始人邀共同开发

    2026年3月13日
    1
  • 用UltraISO制作支持windows 7的U盘启动盘建议收藏

    用UltraISO制作U盘启动盘,有人写过,我也看过,不过依照网上的那些文章,成功的并不多,经过几次试验,在不同的主板环境下成功概率高的方法应该如下:1.UltraISO建议9.3以上2.制作要点

    2021年12月20日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号