Java——正则表达式

1、什么是正则表达式

一个正则表达式,就是用某种模式去匹配字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用,不过,经过练习后,就觉得这些复杂的表达式写起来还是相当简单的,而且,一旦你弄懂它

们,你就能把数小时辛苦而且易错的文本处理工作缩短在几分钟(甚至几秒钟)内完成。

2、正则表达式的语法

正则表达式的分类

  • 特殊字符(转义字符'|'

  • 字符匹配符

  • 选择匹配符

  • 限定符

  • 定位符

  • 分组组合和反向引用符

3、元字符(Metacharacter)

3.1转义号 \\

\\符号说明:在我们使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。

案例: 用$ 去匹配 "abc("会怎样?用(去匹配"abc("会怎样?

Java的正则表达式中,两个\\代表其他语言中的一个\

需要使用转义字符的场景

Java 复制代码
. * + () $ / \ ? [] ^ {}

3.2、字符通配符

符号 符号说明 示例 解释
[] 可接收的字符列表 [efgh] efgh中的任意一个字符
[^] 不可接收的字符列表 [^abc] abc之外的任意1字符,包括数字和特殊符号
- 连字符 A-Z 任意单个大写字母
. 匹配除\n以外的任何字符 a..b a开头,b结尾,中间包括2个任意字符长度为4的字符串
\\d 匹配单个数字字符,相当于[0-9] \\d{3}(\\d)? 包含3个或4个数字的字符串
\\D 匹配非单个数字字符,相当于[^0-9] \\D(\\d)* 以单个非数字字符开头,后接任意个数字字符串
\\w 匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z] \\d{3}\\w{4} 以3个数字字符开头的长度为7的数字字符串
\\W 匹配非单个数字、大小写字母字符,相当于[^0-9a-zA-Z] \\W+\\d{2} 以至少1个非数字字母字符开头,2个数字字符结尾的字符串

3.3、选择通配符|

在匹配某个字符串的时候是选择性的,即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号(|)

符号 符号说明 示例 解释
` ` 匹配`" "`之前或之后的表达式

3.4、限定符

符号 含义 示例 说明 匹配输入
* 指定字符重复0次或n次(无要求,零到多) (abc)* 仅包含任意个abc的字符串,等效于\w* abc abcabcabc
+ 指定字符重复1次或n次(至少一次,1到多) m+(abc)* 以至少1个m开头,后接任意个abc的字符串 m mabc mabcabc
? 指定字符重复0次或1次(最多一次,0到1) m+abc? 以至少1个m开头,后接ababc的字符串 mab mabc mmabc
{n} 只能输入n个字符 [abcd]{3} abcd中字母组成的任意长度为3的字符串 abc dbc adc
{n,} 指定至少n个匹配 [abcd]{3,} abcd中字母组成的任意长度不小于3的字符串 aab dbc aaabdc
{n,m} 指定至少n个但不多于m个匹配 [abcd]{3,5} abcd中字母组成的任意长度不小于3,不大于5的字符串 abc abcd aaaaa bcdab

3.5、定位符

符号 含义 示例 说明 匹配输入
^ 指定起始字符 ^[0-9]+[a-z]* 以至少1个数字开头,后接任意个小写字母的字符串 123
$ 指定结束字符 ^[0-9]\\-[a-z]+$ 以一个数字开头后接连接符"-",并以至少1个小写字母结尾的字符串 m mabc mabcabc
\\b 匹配目标字符串的边界 abc\\b 这里说的字符串的边界指的是子串间有空格,或者是目标字符串的结束位置 cabcd cabc ccabc
\\B 匹配目标字符串的非边界 abc\\B \\b的含义刚刚相反 cabcd cabc ccabc

3.6、分组

常用分组构造形式 说明
(pattern) 非命名捕获。捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。
(?<name>pattern) 命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如:(?'name')
(?:pattern) 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存 储供以后使用的匹配。这对于用"or"字符`(
(?=pattern) 它是一个非捕获匹配。例如,`'Windows (?=95
`(? pattern)`

3.7、修饰符

符号 含义 示例 说明 匹配输入
i 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: Aa 没有区别 123
g 全局匹配 abc/g 查找所有的匹配项 Google abc tana abc
m 多行匹配 ^abc/gm 使边界字符 ^$ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾 abcdf taobao abccc
s 特殊字符圆点 . 中包含换行符 \n /abc./s 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后,. 中包含换行符 \n wert abc cba
相关推荐
Willliam_william16 分钟前
Python学习之路(5)— 使用C扩展
c语言·python·学习
m0_7482517216 分钟前
Spring Boot——统一功能处理
java·spring boot·后端
love静思冥想17 分钟前
Apache Commons Pool :介绍与使用
java·apache·线程池优化
余生H20 分钟前
前端Python应用指南(五)用FastAPI快速构建高性能API
前端·python·fastapi
xmh-sxh-13141 小时前
常用的前端框架有哪些
java
老马啸西风1 小时前
NLP 中文拼写检测纠正论文 A Hybrid Approach to Automatic Corpus Generation 代码实现
java
小蒜学长1 小时前
基于Spring Boot的宠物领养系统的设计与实现(代码+数据库+LW)
java·前端·数据库·spring boot·后端·旅游·宠物
L.S.V.1 小时前
Java 溯本求源之基础(三十一)——泛型
java·开发语言
Redamancy_Xun1 小时前
开源软件兼容性可信量化分析
java·开发语言·程序人生·网络安全·测试用例·可信计算技术
IDRSolutions_CN1 小时前
(教程)用 Java 从 PDF 中提取嵌入的文件
java·经验分享·pdf·软件工程·团队开发