一个正则表达式含有一些具有特殊意义字符的字符串,这些特殊字符称做正则表达式中的元字符。
比如:"\\dcat"中的d就是有特殊意义的元字符,代表0到9中的任何一个。
字符串"Ocat","1cat","2cat",…,"9cat"都是和正则表达式"\\dcat"匹配的字符串。
字符串对象调用public boolean matches(String regex)方法可以判断当前字符串对象是否和参数regex指定的正则表达式匹配。
常用的元字符如下:
元字符 | 在正则表达式中的写法 | 意义 |
. | . | 代表任何一个字符 |
\d | \\d | 代表0-9任何一个数字 |
\D | \\D | 代表任何一个非数字字符 |
\s | \\s | 代表空格类字符,‘\t’、‘\n’、‘\x0B’、‘\f’、‘\r’ |
\S | \\S | 代表非空格类字符 |
\w | \\w | 代表可用于标识符的字符(不包括美元符号) |
\W | \\W | 代表不能用于标识符的字符 |
\p{Lower} | \\p{Lower} | 小写字母[a-z] |
\p{Upper} | \\p{Upper} | 大写字母[A-Z] |
\p{ASCⅡ} | \\p{ASCⅡ} | ASCⅡ字符 |
\p{Alpha} | \\p{Alpha} | 字母 |
\p{Digit} | \\p{Digit} | 数字字符[0-9] |
\p{Alnum} | \\p{Alnum} | 字母或数字 |
\p{Punct} | \\p{Punct} | 标点符号 |
\p{Graph} | \\p{Graph} | 可视字符 |
\p{Print} | \\p{Print} | 可打印字符 |
\p{Blank} | \\p{Blank} | 空格或制表符[\t] |
\p{Cntrl} | \\p{Cntrl} | 控制字符 |
在正则表达式中可以用方括号括起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符,例如:
regex = "[159]ABC";
那么,"1ABC"、"5ABC"和"9ABC"都是和正则表达式regex匹配的字符串。
例如:
[abc]代表a、b、c中的任何一个。
[^abc]代表除了a、b、c以外的任何字符。
[a-zA-Z]代表英文字母(包括大写和小写)中的任何一个。
[a-d]代表a至d中的任何一个。
另外,中括号里允许嵌套中括号,可以进行并、交、差运算,例如:
[a-d[m-p]]代表a至d或m至p中的任何字符(并)。
[a-z&&[def]]代表d、e、或f中的任何一个(交)。
[a-f&&[^bc]]代表a、d、e、f(差)。
注意:由于“.”代表任何一个字符,所以在正则表达式中如果想使用普通意义的点字符,必须使用[.]或用\56表示普通意义的点字符。
在正则表达式中可以使用限定修饰符。
举个例子,对于限定修饰符?,如果X代表正则表达式中的一个元字符或普通字符,那么X?就表示X出现0次或1次,例如:
regex = "hel1o[2468]?";
那么,"hello","hello2","hello4","hello6"和"hello8"都是与正则表达式regex匹配的字符串。
常用的限定修饰符的用法如下:
限定修饰符 | 意义 |
X? | X出现0次或1次 |
X* | X出现0次或多次 |
X+ | X出现1次或多次 |
X{n} | X恰好出现n次 |
X{n,} | X至少出现n次 |
X{n,m} | X出现n次至m次 |
XY | X的后缀是Y |
X|Y | X或Y |
例如:
regex = "@\\w{4}";
那么,"@abcd"、"@Java"、"@知行合一"都是与正则表达式regex匹配的字符串。
注意:有关正则表达式的细节可以去java.util.regex包中查阅Pattern类。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程