[java学习]Pattern和Matcher类学习

Zabbix华为交换机光衰告警 zabbix使用自动发现监控huawei网络设备光衰 阅读详情

结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
Pattern.matcher(String regex,CharSequence input)一种最基础最简单的匹配。

Java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开Java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果会更佳).

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[],我猜String.split(String regex)就是通过Pattern.split(CharSequence input)来实现的.
Java代码示例:
Pattern p=Pattern.compile(“\d+”);
String[] str=p.split(“我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com”);

结果:str[0]=”我的QQ是:” str[1]=”我的电话是:” str[2]=”我的邮箱是:aaa@aaa.com”

2.Pattern.matcher(String regex,CharSequence input)
一个静态方法,用于快速匹配1 字符串,该方法适合用于只匹配一次,且匹配全部字符串.
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)
说了这么多,终于轮到Matcher类登场了,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

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

我们现在回头看一下Pattern.matcher(String regex,CharSequence input),它与下面这段代码等价
Pattern.compile(regex).matcher(input).matches()

lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
Java代码示例:
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()对字符串进行匹配,匹配到的字符串可以在任何位置.
Java代码示例:
Pattern p=Pattern.compile(“\d+”);
Matcher m=p.matcher(“22bb23”);
m.find();//返回true
Matcher m2=p.matcher(“aa2223”);
m2.find();//返回true
Matcher m3=p.matcher(“aa2223bb”);
m3.find();//返回true
Matcher m4=p.matcher(“aabb”);
m4.find();//返回false

5.Mathcer.start()/ Matcher.end()/ Matcher.group()
当使用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串
Java代码示例:
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=p.matcher(“2223bb”);
m2.lookingAt(); //匹配2223
m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
m2.end(); //返回4
m2.group(); //返回2223

Matcher m3=p.matcher(“2223”); //如果Matcher m3=p.matcher(“2223bb”); 那么下面的方法出错,因为不匹配返回false
m3.matches(); //匹配整个字符串
m3.start(); //返回0
m3.end(); //返回3,原因相信大家也清楚了,因为matches()需要匹配所有字符串
m3.group(); //返回2223

说了这么多,相信大家都明白了以上几个方法的使用,该说说正则表达式的分组在java中是怎么使用的.
start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
Java代码示例:
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时,才可以使用.

MacBook用户必看:用Homebrew一键搞定frp内网穿透(含阿里云配置模板) 本文为MacBook用户提供基于Homebrew的frp内网穿透实战指南,详细介绍了从环境准备到阿里云服务器配置的全过程。通过Homebrew一键安装frp客户端,结合阿里云配置模板,实现高效稳定的内网穿透,适用于远程开发、IoT设备调试等多种场景。 阅读详情

相关推荐

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 378

Java: Pattern 类与 Matcher 类

pattern (模式) 与 matcher (匹配) 搭配使用实现对字符序列的检索和指定模式匹配,这两个类都在 java.util.regex 包中,不同于 StringTokenizer类 和 Scanner类,这两个类都是对字符序列的子序列语言符号进行指定分隔。 1、建立 Pattern 对象:将给定的正则表达式编译成一个模式 (1)compile(String regex) 返回一个 Pattern 对象: 使用正则表达式 regex 做参数得...

belien 6550

C# 开发 WPS 插件实战:从环境搭建到功能实现(附完整代码)

本文提供了一份详尽的C#开发WPS插件实战指南,涵盖从环境搭建到功能实现的完整流程。通过COM技术,开发者可以创建自定义插件,为WPS Office扩展自动化功能,如文档处理与格式转换。文章包含核心概念解析、Ribbon界面集成、调试部署方法及完整代码示例,帮助开发者快速上手。

rust6ferris的博客 928

Java Pattern和Matcher用法

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher。 Pattern,一个Pattern是一个正则表达式经编译后的表现模式。 Matcher,一个Matcher对象是一个状态机器,它依据Pattern对象...

假装你是大灰狼的专栏 4026

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4544

TensorFlow GPU版本安装步骤-Windows系统

本文由在Windows下安装TensorFlow GPU版本教程-优快云等整理得到。 目录 1、确认显卡是否支持CUDA 1.1 查看显卡信息 打开“设备管理器”,查看显卡信息,如下图所示: 由上图知,本电脑的显卡为NVIDIA Quadro P400. 1.2 查看支持CUDA的显卡 网址:https://developer.nvidia.com/cuda-gpus 经查询可知,该显卡支持CUDA,如下图所示: 2、安装CUDA 2.1 下载CUDA 网址:https://developer.nvi

x_lingyun的专栏 766

Java正则表达式(Pattern、Matcher)

1.常用正则标记(熟记*)、2. 基础案例搭配Sting的常用方法、3.正则表达式java.util.regex包支持、4.练习巩固

Alphamilk的博客 2274

学Simulink——基于风力发电系统的建模与仿真场景:基于自适应控制的风力发电系统输出功率调节

本文详细介绍了使用Simulink搭建风力发电系统自适应控制模型的完整流程。首先阐述了风速波动对电网的影响及自适应控制的优势,然后逐步指导创建Simulink项目、搭建系统结构(包括风速源、风轮机、发电机等模块),重点讲解了模型参考自适应控制器(MRAC)的设计步骤和参数设置方法。通过仿真分析验证了系统在风速变化时仍能保持输出功率稳定,展示了自适应控制的响应速度和鲁棒性。最后提出了引入深度学习预测、多变量控制等优化方向,为新能源领域工程师提供了实用的建模与仿真指导。

amy_mhd的博客 220

Java正则表达式之Pattern和Matcher

java正则表达式-----Pattern 和 Matcher的使用

似霰的博客 1万+

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1549

SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案

本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。

baidu_35680696的博客 246

正则表达式的验证

java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果会更佳). Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工...

梦溪笔谈 848

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

学习-Java常用类之Pattern和Matcher类

Pattern.COMMENTS:在这种模式下,匹配时会忽略(正则表达式里的)空格字符(不是指表达式里的"\s",而是指表达式里的空格,tab,回车之类)。我们的字符串 String 类中包含了正则的匹配、字符的替换等操作,但是,有的时候 String 的正则匹配不能够满足要求,这时我们就需要用到 Pattern 和 Matcher 类。默认情况下,表达式'.'不匹配行的结束符;Pattern.UNIX_LINES:在这个模式下,只有'\n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配。

千浔的博客 1710

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java.util.regex包下Pattern、Matcher类学习

java.util.regex包下Pattern、Matcher类学习 此文所有的程序代码地址:RegularExperssion java.util.regex包主要包括以下三个类: Pattern 类 Matcher 类 PatternSyntaxException 类 PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。 Pa...

远方水木 3102

Java学习笔记——正则表达式(Pattern类、Matcher类和PatternSyntaxException)

目录 一、Pattern类 (一)Pattern 介绍 (二)Pattern 方法 二、Matcher类 (一)Matcher 类介绍 (二)Matcher 类方法 三、PatternSyntaxException 四、代码 Java中与正则表达式相关的类分别为:Pattern 类、Matcher 类和PatternSyntaxException。 三类的功能:pattern 对象是一个正则表达式的编译表示;Matcher 对象是对输入字符串进行解释和匹配操作的引擎;PatternS..

D77的博客 7843

java学习笔记42:Pattern类和Matcher

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式。 然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串..

八十岁老将的博客 313

正则表达式--java.util.regex包下Pattern Matcher类学习

1. Java中的正则表达式应用 1、java.util.regex 包主要包括以下三个类: Pattern 类: pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。 Matcher 类: Matcher 对...

dgqx93035的博客 478

头歌:第1关:学习-Java常用类之Pattern和Matcher类

【代码】头歌:第1关:学习-Java常用类之Pattern和Matcher类。

Molly 的博客 2526

14-java学习-正则表达式、Pattern、Matcher类、Math类、Random类、System类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类

14-java学习-正则表达式、Pattern和Matcher类、Math类、Random类、System类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类&案例代码 目录: 正则表达式 Pattern和Matcher类 Math类 Random类 System类 BigDecimal类 Date类 SimpleDateFormat类 Cale...

weixin_42401546的博客 391

java.util.regex 包_正则表达式--java.util.regex包下Pattern Matcher类学习

1. Java中的正则表达式应用1、java.util.regex 包主要包括以下三个类:Pattern 类:pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。Matcher 类:Matcher 对象是对输入字符串进行解...

weixin_31280837的博客 760

Java基础学习摘要之正则表达式 、Pattern和Matcher类 、Math类 、Random类、System类、BigDecimal类、Date类、SimpleDateFormat类、Calen

正则表达式 概念:正确规则的表达式 功能方法: public boolean matches(String regex) 此字符串是否匹配给定的正则表达式 public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串 public String replaceAll(String regex,String re...

Eternity_y的博客 367

java 学习7.13 正则表达式 Pattern和Matcher类 Math类 Random类 System类 BigDecimal类 Date类 SimpleDateFormat类 Cale

14.01_常见对象(正则表达式的概述和简单使用) A:正则表达式:正确规则的表达式 规则java给我们定的 是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。 B:案例演示 需求:校验qq号码. 1:要求必须是5-15位数字 2:0不能开头 a:非正则表达式实现 b:正则表达式实现 private static ...

haha9417的博客 294

20165103 2017-2018-2 《Java程序设计》第6周学习总结

20165103 2017-2018-2 《Java程序设计》第6周学习总结 教材学习内容总结 关于String类及其方法的使用 正则表达式的相关内容 字符串分析器StringTokenizer类的使用 Scanner类的方法调用 StringBuffer类的特点及方法 Date类和Calendar类的特点及方法 日期和数字格式化 Class类、Console类、Pattern类、Ma...

171

java Matcher正则匹配获取最后一个

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnN使用 Java Matcher 正则匹配获取最后一个匹配项 在开发过程中,正则表达式是一种强大的工具,可以帮助我们处理和解析字符串数据。今天,我们将学习如何使用 Java 的 Matche...

weixin_40347252的博客 437

Java—正则表达式(Pattern类和Matcher类)

正则表达式介绍   正则表达式可以用于对字符串的处理,相当于是一个匹配字符串的模板。主要包含查找、替换、分割、提取等操作;Java中通过Pattern和Matcher类提供对正则的支持。 字符处理 特殊字符处理 对于特殊字符:$、^、(、)、[、]、 {、}、 *、 +、 ?、 .、\ 、|前面都要加上\进行转义。 预定义字符 预定义字符即为正则表达式中的“通配符”,就是可以匹配多个字符的特殊字符...

Andya_net的博客 468

Java Pattern类和Matcher类的使用

Pattern 对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为 Pattern 对象,然后再利用该 Pattern 对象创建对应的 Matcher 对象。执行匹配所涉及的状态保留在 Matcher 对象中,多个 Matcher 对象可共享同一个 Pattern 对象。

Itmastergo的博客 345
上一篇: 正则表达式学习-js/java前后端手机邮箱隐藏
下一篇: 对IIS的理解
Algorithm_goddness
博客等级 码龄10年 25粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值