Java—正则表达式(Pattern类和Matcher类)
正则表达式介绍
正则表达式可以用于对字符串的处理,相当于是一个匹配字符串的模板。主要包含查找、替换、分割、提取等操作;Java中通过Pattern
和Matcher
类提供对正则的支持。
字符处理
特殊字符处理
对于特殊字符:$
、^
、(
、)
、[
、]
、 {
、}
、 *
、 +
、 ?
、 .
、\
、|
前面都要加上\
进行转义。
预定义字符
预定义字符即为正则表达式中的“通配符”,就是可以匹配多个字符的特殊字符。
预定义字符 | 作用 |
---|---|
. | 匹配任意字符 |
\d | digit,代表数字,匹配0-9中的所有数字 |
\D | 匹配非数字 |
\s | space,代表空白,匹配所有空白字符(空格、换行、回车、换页、制表符等) |
\S | 匹配所有非空白字符 |
\w | word,代表单词,匹配所有单词字符,包含0-9所有数字、26个英文字母以及下划线"_" |
\W | 匹配所有非单词字符 |
三种模式的数量表示符
- 贪婪模式:Greedy,数量表示符默认为贪婪模式,会一直匹配下去,直到无法匹配为止。
- 勉强模式:Reluctant,用问号
?
后缀表示,只会匹配最少的字符,也被称为最小匹配模式。 - 占有模式: Possessive, 用加号
+
后缀表示。
贪婪模式 | 勉强模式 | 占用模式 | 作用 |
---|---|---|---|
X? | X?? | X?? | X表达式出现0次或1次 |
X* | X*? | X*? | X表达式出现0次或多次 |
X+ | X+? | X+? | X表达式出现1次或多次 |
X{n} | X{n}? | X{n}? | X表达式出现n次 |
X{n,} | X{n,}? | X{n,}? | X表达式最少出现n次 |
X{n,m} | X{n,m}? | X{n,m}? | X表达式最少出现n次,最多出现m次 |
方括号表达式
方括号表达式含义 | 作用 |
---|---|
枚举 | [abcd],表示a、b、c、d中的任意一个字符; |
范围:- | [a-e],表示从a到e字母中的任意字母;可结合枚举进行使用,[a-eu-z],表示从a到e,从u到z范围内的任意字符 |
否定:^ | [abcd],表示不是a、b、c、d中的字符;[a~e]表示不是a至f范围的字符 |
与运算:&& | [a-g&&[bch],求a~z和bch的交集,则结果为bc |
并运算 | [a-e[h-j]] |
正则表达式的使用
String类常用方法
String类
中的查找、替换、分割、提取等操作方法
boolean matches(String regex)
:判断该字符串是否匹配指定的正则表达式;String replaceFirst(String regex, String replaceStr)
:将该字符串中第一个匹配regex的子串替换成replaceStr;String replaceAll(String regex, String replaceStr)
:将该字符串中所有匹配regex的子串替换成replaceStr;String[] split(String regex)
:以regex作为分隔符对字符串进行分割;
Matcher类常用方法
find()
:返回目标字符串中是否包含与Pattern匹配的子串,若传入int类型的参数,则从该int索引处向下搜索;group()
:返回上一次与Pattern匹配的子串;start()
:用于确定子串在目标字符串中的位置;返回上一次与Pattern匹配的子串在目标字符串中的开始位置;end()
:用于确定子串在目标字符串中的位置;返回上一次与Pattern匹配的子串在目标字符串中的结束位置加1;matches()
:判断整个目标字符串与Pattern是否匹配,要求整个字符串都和Pattern完全匹配时才会返回true;lookingAt
:返回目标字符串前缀与Pattern是否匹配,只需要字符串以Pattern开头就返回true;reset()
:将现有的Matcher对象应用于一个新的字符序列;
Pattern对象用法
Pattern是不可变类,是正则表达式编译后在内存中的表示形式,在Java中使用正则表达式字符串必须要先被编译为Patter对象,然后再使用Pattern对象创建对应的Matcher对象。
用法
// 编译正则表达式为Pattern对象
Pattern pattern = Pattern.compile("bc*d");
// 使用编译好的Pattern对象创建Matcher对象
Matcher m = p.matcher("bccccd");
boolean b = m.matches();
System.out.println(b);
结果
true
上述步骤等价于
boolean b = Pattern.matches("bc*d", "bccccd");
System.out.println(b);
封装正则表达式工具类
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PatternUtil {public static Matcher getMatcher(String regex, String source) {Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(source);return matcher;}public static void main(String[] args) {String regix = "(\\D*)(\\d+)(.*)(\\d)";String str = "this is test 1000 $, please check! 12";Matcher matcher = getMatcher(regix, str);if (matcher.find()) {System.out.println("matcher group():" + matcher.group());System.out.println("matcher group(0): " + matcher.group(0));System.out.println("matcher group(1):" + matcher.group(1));System.out.println("matcher group(2):" + matcher.group(2));System.out.println("matcher group(3):" + matcher.group(3));System.out.println("matcher group(4):" + matcher.group(4));} else {System.out.println("no match");}}
}
运行结果
matcher group():this is test 1000 $, please check! 12
matcher group(0): this is test 1000 $, please check! 12
matcher group(1):this is test
matcher group(2):1000
matcher group(3): $, please check! 1
matcher group(4):2
Java—正则表达式(Pattern类和Matcher类)相关推荐
- JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- JAVA正则表达式:Pattern类与Matcher类详解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解
以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1 ((A) ...
- java正则表达式类_java中正则表达式之Pattern类与Matcher类
java中正则表达式之Pattern类与Matcher类 ======================================================================= ...
- Java学习笔记——正则表达式(Pattern类、Matcher类和PatternSyntaxException)
目录 一.Pattern类 (一)Pattern 介绍 (二)Pattern 方法 二.Matcher类 (一)Matcher 类介绍 (二)Matcher 类方法 三.PatternSyntaxEx ...
- 正则表达式、常用类(Pattern类、Matcher类、Math类、System类、Random类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类)
JAVA学习第十六天-正则表达式.常用类(Pattern类.Matcher类.Math类.System类.Random类.BigDecimal类.Date类.SimpleDateFormat类.Cal ...
- 详解Pattern类和Matcher类
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果 ...
- pattern类和matcher类,math类,Random类,Date类,SimpleDateFormat类,calender类
课堂笔记2020.05.03 day14 pattern类和matcher类 模式器:正则表达式的编译(也就是将正则表达是封装起来). Pattern p = Pattern.compile(&quo ...
- p.matches java_Java matches类,Pattern类及matcher类用法示例
本文实例讲述了Java matches类,Pattern类及matcher类用法.分享给大家供大家参考,具体如下: Pattern类 正则表达式常见规则 A:字符 x 字符 x.举例:'a'表示字符a ...
最新文章
- Android Fragment 基本介绍
- react 引入html文件_javascript – React:如何加载和呈现外部html文件?
- 超全的Go Http路由框架性能比较
- 短视频自研还是选择第三方?技术选型前必看的自检清单
- 修改Linux内核启动图片
- 程序员过关斩将--搞定秒杀,只需要这几步!!
- java keystore ca_PKCS12 Java Keystore from CA and User certificate in java
- 自适应HTML5宽屏物流运输快递货运类网站源码 pbootcms模板
- 神码与SUSE共促Unix向x86+Linux迁移
- 全球搜索引擎集合(主要有移动搜索APP的)
- 啦啦外卖独立版42.0至尊版全开源含vue代码修复app没声音
- Python 生成微信头图
- Java 初级软件工程师 认证考试试卷1
- CAN总线通信学习笔记
- C语言:ASCII字符文件与二进制字符文件的相互转换
- 【Vue】基础系列(八)数据绑定以及姓名案例的三种写法
- P4 晶体管四种工作状态+静态分析【更新】
- 0056-在OpenCV环境下使用混合高斯背景建模提取前景目标
- C语言写的小游戏源码,c语言小游戏源码(华容道)
- MARKETS AND MARKET LOGIC——The Market‘s Principles (5)
热门文章
- python正则匹配表达式(1)
- Ubuntu16.04下配置pip国内镜像源加速安装
- 通用企业网站源码 dedecms织梦模板 (带手机端)+PC+移动端+利于SEO优化
- HTML5汽车轮毂改装网站模板
- 实用常识 | 文件都在C盘,一点儿都不圆润,盘它!
- java共享锁排它锁_java 实现共享锁和排它锁
- systemtap PHP,systemtap初体验
- arduino w5500 mysql,W5500网络模块会出现奇怪的问题
- 如何保证投票公平_从声音玩具淘汰、五条人复活,我看到了《乐队的夏天》的不公平...
- 系统架构设计上需要注意的