技术 · 阅读记录
正则表达式中的简单模式匹配
摘要
本文将整理正则表达式的基础内容,其中字符、字符类、逻辑运算符以及特殊结构等内容。
字符
基本字符
| 字符 | 匹配 |
|---|---|
| x | 字符 x |
| \\ | 反斜线字符 |
| \0n | 带有八进制值 0 的字符 n (0 <= n <= 7) |
| \0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) |
| \0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |
| \xhh | 带有十六进制值 0x 的字符 hh |
| \uhhhh | 带有十六进制值 0x 的字符 hhhh |
| \t | 制表符 (‘\u0009’) |
| \n | 新行(换行)符 (‘\u000A’) |
| \r | 回车符 (‘\u000D’) |
| \f | 换页符 (‘\u000C’) |
| \a | 报警 (bell) 符 (‘\u0007’) |
| \e | 转义符 (‘\u001B’) |
| \cx | 对应于 x 的控制符 |
元字符
元字符(metacharacter)是一种特殊的字符,该字符被匹配器(Matcher)解析位特殊含义[metacharacter]。
在Java的API中,被支持的元字符有: <([{\^-=$!|]})?/*+.>
注意: 在特定情况下,上述列表中的特殊字符并不被认为是元字符。
在正则表达式中,有两种方式可以把元字符强制转换位普通字符:
- 使用反斜线(
\)来处理元字符 - 使用
\Q(开始位置)和\E(结束位置)来环绕元字符
字符类(character class)
字符类(character class)(有时也称为字符类),有时也称为字符集(character class),定义了一组字符,其中任意字符都可能出现在匹配成功的字符串中[character_class]。
0、普通字符类
| 字符类 | 描述 |
|---|---|
| [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]] | a 到 z,除了 b 和 c:[ad-z](减去) |
| [a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) |
1、预定义字符类
| 预定义字符类 | 描述 |
|---|---|
| . | 任何字符(与行结束符可能匹配也可能不匹配) |
| \d | 数字:[0-9] |
| \D | 非数字: [^0-9] |
| \s | 空白字符:[ \t\n\x0B\f\r] |
| \S | 非空白字符:[^\s] |
| \w | 单词字符:[a-zA-Z_0-9] |
| \W | 非单词字符:[^\w] |
2、POSIX 字符类
POSIX(可移植操作系统接口,Portable Operating System Interface of UNIX,缩写为 POSIX)字符类是用于US-ASCII。
| POSIX 字符类 | 描述 |
|---|---|
| \p{Lower} | 小写字母字符:[a-z] |
| \p{Upper} | 大写字母字符:[A-Z] |
| \p{ASCII} | 所有 ASCII:[\x00-\x7F] |
| \p{Alpha} | 字母字符:[\p{Lower}\p{Upper}] |
| \p{Digit} | 十进制数字:[0-9] |
| \p{Alnum} | 字母数字字符:[\p{Alpha}\p{Digit}] |
| \p{Punct} | 标点符号:!”#$%&’()*+,-./:;<=>?@[\]^_`{|}~ |
| \p{Graph} | 可见字符:[\p{Alnum}\p{Punct}] |
| \p{Print} | 可打印字符:[\p{Graph}\x20] |
| \p{Blank} | 空格或制表符:[ \t] |
| \p{Cntrl} | 控制字符:[\x00-\x1F\x7F] |
| \p{XDigit} | 十六进制数字:[0-9a-fA-F] |
| \p{Space} | 空白字符:[ \t\n\x0B\f\r] |
逻辑运算符
| 运算符 | 描述 |
|---|---|
| XY | X 后跟 Y |
| X|Y | X 或 Y |
| (X) | X,作为捕获组 |
特殊构造(非捕获)
| 特殊结构 | 描述 |
|---|---|
| (?:X) | X,作为非捕获组 |
| (?idmsux-idmsux) | Nothing,但是将匹配标志i d m s u x on - off |
| (?idmsux-idmsux:X) | X,作为带有给定标志 i d m s u x on - off |
| (?=X) | X,通过零宽度的正 lookahead (正前瞻) |
| (?!X) | X,通过零宽度的负 lookahead (反前瞻) |
| (?<=X) | X,通过零宽度的正 lookbehind (正后顾) |
| (?<!X) | X,通过零宽度的负 lookbehind (反后顾) |
| (?>X) | X,作为独立的非捕获组 |
引用
引用 | 描述 ——|—— \ | Nothing,但是引用接下来的字符 \Q | Nothing,但是引用所有字符,直到 \E \E | Nothing,但是结束从 \Q 开始的引用