| \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]
|
引用
| 语法 | 说明 |
| — | — |
| \ | Nothing,但是引用以下字符 |
| \Q | Nothing,但是引用所有字符,直到 \E |
| \E | Nothing,但是结束从 \Q 开始的引用 |
如:\Q\w+\E
表示字符串\w+
而不是正则中的单词字符:[a-zA-Z_0-9]。
其他
| 语法 | 说明 |
| — | — |
| \xhh | 十六进制值为0xhh的字符 |
| \uhhhh | 十六进制表示为0xhhhh的Unicode字符 |
| \t | 制表符Tab |
| \n | 换行符 |
| \r | 回车 |
| \f | 换页 |
| \e | 转义(Escape) |
处理选项
上面介绍了几个选项如忽略大小写,处理多行等,这些选项能用来改变处理正则表达式的方式。下面是Java中常用的正则表达式选项:
| 名称 | 说明 |
| — | — |
| CASE_INSENSITIVE | 匹配时区分大小写 |
| MULTILINE | 更改^
和$
的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$
的精确含意是:匹配\n之前的位置以及字符串结束前的位置.) |
| DOTALL | 在 dotall 模式中,表达式 . 可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符。 |
| UNICODE_CASE | 指定此标志后,由 CASE_INSENSITIVE 标志启用时,不区分大小写的匹配将以符合 Unicode Standard 的方式完成。默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。通过嵌入式标志表达式 (?u) 也可以启用 Unicode 感知的大小写折叠。指定此标志可能对性能产生影响。 |
| CANON_EQ | 启用规范等价。指定此标志后,当且仅当其完整规范分解匹配时,两个字符才可视为匹配。例如,当指定此标志时,表达式 “a\u030A” 将与字符串 “\u00E5” 匹配。默认情况下,匹配不考虑采用规范等价。不存在可以启用规范等价的嵌入式标志字符。指定此标志可能对性能产生影响。 |
| UNIX_LINES | 启用 Unix 行模式。在此模式中,.、^ 和 $ 的行为中仅识别 ‘\n’ 行结束符。通过嵌入式标志表达式 (?d) 也可以启用 Unix 行模式。 |
| LITERAL | 指定此标志后,指定模式的输入字符串就会作为字面值字符序列来对待。输入序列中的元字符或转义序列不具有任何特殊意义。标志 CASE_INSENSITIVE 和 UNICODE_CASE 在与此标志一起使用时将对匹配产生影响。其他标志都变得多余了。不存在可以启用字面值解析的嵌入式标志字符。 |
| UNICODE_CHARACTER_CLASS | |
| COMMENTS | 模式中允许空白和注释。此模式将忽略空白和在结束行之前以 # 开头的嵌入式注释。通过嵌入式标志表达式 (?x) 也可以启用注释模式。 |
JAVA
基本用法
Pattern pattern = Pattern.compile(“\ba\w*\b”);
Matcher matcher = pattern.matcher(“abcdab cccabcd aaacd”);
int index = 0;
while (matcher.find()) {
String res = matcher.group();
System.out.println(index + “:” + res);
index++;
}
\\ba\\w*\\b
表示匹配以字母a为开头的单词。
Pattern.compile(regex)
表示将给定的正则表达式编译到具有给定标志的模式中。
matcher(str)
创建匹配给定输入与此模式的匹配器。
mather.find()
尝试查找与该模式匹配的输入序列的下一个子序列。
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。
group()
返回由以前匹配操作所匹配的输入子序列。
打印结果:
不同
从上例中可以看出,Java中的正则表达式与之前所说不一致(多了一个),在其他语言中\\
表示我想在正则表达式中插入一个普通的反斜线,请不要给它任何特殊的意义,而在Java中,\\
的意思是我想要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
如果想表示数字,则是\\d
。如果要插入普通的反斜线,则是\\\\
。
String
String类中有几种方法可以使用正则表达式:
| 方法 | 返回类型 | 功能 | 示例 |
| — | — | — | — |
| matches() | boolean | 告知此字符串是否匹配给定的正则表达式。 | "-1234".matches("^-?\\d+$"