Java——正则表达式

1、什么是正则表达式

一个正则表达式,就是用某种模式去匹配字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用,不过,经过练习后,就觉得这些复杂的表达式写起来还是相当简单的,而且,一旦你弄懂它
们,你就能把数小时辛苦而且易错的文本处理工作缩短在几分钟(甚至几秒钟)内完成。

2、正则表达式的语法

正则表达式的分类

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

  • 字符匹配符

  • 选择匹配符

  • 限定符

  • 定位符

  • 分组组合和反向引用符

3、元字符(Metacharacter)

3.1转义号 \\

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

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

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

需要使用转义字符的场景

. * + () $ / \ ? [] ^ {}

3.2、字符通配符

符号符号说明示例解释
[]可接收的字符列表[efgh]efgh中的任意一个字符
[^]不可接收的字符列表[^abc]abc之外的任意1字符,包括数字和特殊符号
-连字符A-Z任意单个大写字母
.匹配除\n以外的任何字符a..ba开头,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、选择通配符|

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

符号符号说明示例解释
|匹配"|"之前或之后的表达式ab|cdab或者cd

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"字符(|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) '是比'industry|industries'更经济的表达式。
(?=pattern)它是一个非捕获匹配。例如,'Windows (?=95|98|NT|2000)'匹配 "Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的 "Windows"
(?|pattern)该表达式匹配不处于匹配pattern的字符串的起始点的搜索字符串。它是一个非捕获匹配。例如,'Windows (?!95|98|NT|2000)'匹配 "Windows 3.1"中的"Windows",但不匹配"Windows 2000"中的 "Windows"

3.7、修饰符

符号含义示例说明匹配输入
i不区分大小写将匹配设置为不区分大小写,搜索时不区分大小写: Aa 没有区别123
g全局匹配abc/g查找所有的匹配项Google abc tana abc
m多行匹配^abc/gm使边界字符 ^$ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾abcdf taobao abccc
s特殊字符圆点 . 中包含换行符 \n/abc./s默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后,. 中包含换行符 \nwert abc cba