API 所支持的元字符有:(
[
{
\
^
-
$
|
}
]
)
?
*
+
.
[abc] | a, b 或 c(简单类) |
[^abc] | 除 a, b 或 c 之外的任意字符(取反) |
[a-zA-Z] | a 到 z,或 A 到 Z,包括(范围) |
[a-d[m-p]] | a 到 d,或 m 到 p:[a-dm-p] (并集) |
[a-z&&[def]] | d,e 或 f(交集) |
[a-z&&[^bc]] | 除 b 和 c 之外的 a 到 z 字符:[ad-z] (差集) |
[a-z&&[^m-p]] | a 到 z,并且不包括 m 到 p:[a-lq-z] (差集) |
. | 任何字符(匹配或者不匹配行结束符) |
\d | 数字字符:[0-9] |
\D | 非数字字符:[^0-9] |
\s | 空白字符:[\t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
以反斜线(\
)开始的构造称为转义构造(escaped constructs)。回顾一下在 字符串 一节中的转义构造,在那里我们提及了使用反斜线,以及用于引用的\Q
和\E
。在字符串中使用转义构造,必须在一个反斜线前再增加一个反斜用于字符串的编译,例如:
private final String REGEX = "\\d"; // 单个数字
这个例子中\d
是正则表达式,另外的那个反斜线是用于代码编译所必需的。但是测试用具读取的表达式,是直接从控制台中输入的,因此不需要那个多出来的反斜线。
量 词 种 类 | 意 义 | ||
贪婪 | 勉强 | 侵占 | |
X? | X?? | X?+ | 匹配 X 零次或一次 |
X* | X*? | X*+ | 匹配 X 零次或多次 |
X+ | X+? | X++ | 匹配 X 一次或多次 |
X{n} | X{n}? | X{n}+ | 匹配 X n 次 |
X{n,} | X{n,}? | X{n,}+ | 匹配 X 至少 n 次 |
X{n,m} | X{n,m}? | X{n,m}+ | 匹配 X 至少 n 次,但不多于 m 次 |
^ | 行首 |
$ | 行尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
^
和
$
边界匹配器的用法。注意上表中,
^
匹配行首,
$
匹配行尾。
常 量 | 等价的内嵌标志表达式 |
Pattern.CANON_EQ | 没有 |
Pattern.CASE_INSENSITIVE | (?i) |
Pattern.COMMENTS | (?x) |
Pattern.MULTILINE | (?m) |
Pattern.DOTALL | (?s) |
Pattern.LITERAL | 没有 |
Pattern.UNICODE_CASE | (?u) |
Pattern.UNIX_LINES | (?d) |