Java中的正则表达式语法

本文详细介绍了Java正则表达式中的元字符,包括限定符、选择匹配符、分组、定位符、转义号以及字符匹配规则,并讨论了非贪婪匹配的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

元字符介绍
如果想要灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:
1. 限定符
2. 选择匹配符
3. 分组组合和反向引用符
4. 特殊字符
5. 字符匹配符
6. 定位符
元字符—转义号 \
在Java的正则表达式中,两个\\代表其他语言中的一个\
需要用到转义符号的字符有一下:. * + ( ) & / \ ? [ ] ^ { }
元字符—字符匹配符
符号含义示例解释
[ ]可接收的字符列表[efgh]e、f、g、h中的任意一个字符
[ ^ ]不可接收的字符列表[^abd]除a、b、c之外的任意一个字符
-连字符A-Z任意单个大写字母
符号含义示例说明匹配 输入
.匹配除\n以外的任何字符a…b以a开头,以b结尾,中间包括2个任意字符长度为4的字符串aaab、a#*b
\d匹配单个数字字符,相当于[0-9]\d{3}(\d)?包含3个或4个数字的字符串123、9876
\D匹配单个非数字字符,相当于[^0-9]\D(\d)*以单个非数字字符开头,后接任意个数字字符串a、A123
\w匹配单个数字、大小写字母字符和下划线相当于[0-9a-zA-Z_] \d{3}\w{4}以3个数字字符开头的长度为7的数字字母字符串234abcd12345Pe
\W匹配单个非数字、大小写字母字符和下划线,相当于[^0-9a-zA-Z_]\W+\d{2}以至少一个非数字字母字符开头,两个数字字符结尾的字符串#29、#?@10

补充:\s :匹配任何空白字符 \S:匹配任何非空白字符
注意:Java正则表达式默认是区分字母大小写的,如果想设置为不区分大小写,则有如下方式
1. (?i)abd 表示abc都不区分大小写 a(?i)表示bc不区分大小写 a((?i)b)c表示只有b不区分大小写
2. Pattern pat = Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

元字符—选择匹配符
在匹配某个字符串的时候是选择性的,即既可以匹配这个,也可以匹配那个
符号含义示例解释
|匹配"|"之前或之后的表达式ab|cdab或者cd
元字符—限定符
符号含义示例说明匹配输入
*指定字符重复0次或n次(无要求)0到多(abc)*仅包含abc的字符串,abd、abcabcabc
+指定字符重复1次或n次(至少一次)1到多m+(abc)*以至少1个m开头,后接任意个abc的字符串m、mabc
?指定字符重复0次或1次(最多一次) 0到1m+abc?以至少1个m开头,后接ab或abc的字符串mab、mabc
{n}只能输入n个字符[abcd]{3}由abcd中字母组成的任意长度为3的字符abd、dbc
{n,}指定至少 n 个匹配[abcd]{3,}由abcd中字母组成的任意长度不小于3的字符串aab、dbca
{n,m}指定至少n 个但不多于 m 个匹配[abcd]{3,5}由abcd中字母组成的任意长度不小于3,不大于5的字符串abc、abcda
元字符—定位符
符号含义示例说明匹配输入
^指定起始字符^[0-9]+[a-z]*以至少一个数字开头,后接任意个小写字母的字符串123/6aa
$指定结束字符^[0-9]\\-[a-z]+$以1个数字开头后接连字符“-”,并以至少一个小写字母结尾的字符串1-a
\\b匹配目标字符串的边界han\\b这里说的字符串的边界指的是子串有间隔或者是目标字符串的结束位置hanshunping sphan nnhan
\\B匹配目标字符串的非边界han\\B和\\b的含义刚好相反hanshunping sphan nnhan
分组
常用分组构造形式说明
(pattern)非命名捕获。捕获匹配的子字符串。编号为0的第一个捕获是由整个正则表达式模式匹配的文本,其他捕获结果则根据左括号的顺序从1开始自动编号。
(?<name>pattern)命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号代替尖括号。
(?:pattern)匹配pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“or”字符组合模式部件的情况很有用。例如industry(?:y|ies) 是比industry|industries更经济的表达式
(?=pattern)它是一个非捕获匹配。例如,Windows(?=95|98|NT|2000)匹配Windos2000中的Windows但不匹配Windows3.1中的Windows
(?!pattern)该表达式与(?=pattern)相反,Windows(?!95|98|NT|2000)匹配Windows3.1中的Windows,但不匹配Windows2000中的Windows
非贪婪匹配
默认情况下,Java中的正则匹配采用贪婪匹配,如果想更改为贪婪匹配,则需要在其他限定符后面添加一个'?'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值