正则表达式与元字符
概念:一个正则表达式是含有一些具有特殊意义字符的字符序列,而这些特殊字符称作正则表达式中的元字符。
String对象调用 public boolean matches(String regex) 方法可以判断当前String对象的字符序列是否和参数regex指定的正则表达式相匹配,即是否和regex的字符序列相匹配。
例如 “9hello”.matches("\dhello")的返回值是true,表示字符串 “9hello” 的字符序列与正则表达式 “\dhello” 相匹配。而正则表达式中的 “\d” 表示的是0-9之间的任何一个数字。
一、常用的元字符及其意义:
元字符 | 在正则表达式中的写法 | 意义 |
---|---|---|
. | "." | 代表任何一个字符 |
\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{ASCII} | "\\p{ASCII}" | ASCII字符 |
\p{Alpha} | "\\p{Alpha}" | 字母 |
\p{Digit} | "\\p{Digit}" | 数字字符,即[0~9] |
\p{Alnum} | "\\p{Alnum}" | 字母或数字 |
\p{Punct} | "\\p{Punct}" | 标点符号标识符 |
\p{Graph} | "\\p{Graph}" | 可视字符:\p{Alnum}\p{Punct} |
\p{Print} | "\\p{Graph}" | 可打印字符:\p{Graph} |
\p{Blank} | "\\p{Blank}" | 空格或制表符[\t] |
\p{Cntrl} | "\\p{Cntrl}" | 控制字符:[\x00-\x1F\x7F] |
二、在正则表达式中,可以用中括号括起若干个字符来表示一个元字符,该元字符代表中括号中的任何一个字符。
例如String 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(差) |
三、在正则表达式中可以使用限定修饰符。
常用的限定修饰符用法表:
带限定符号的模式 | 意义 |
---|---|
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 |