文档

Java™教程
隐藏目录
预定义字符类
路径: Java基础类
课程: 正则表达式

预定义字符类

Pattern API包含一些有用的预定义字符类,它们为常用的正则表达式提供了方便的简写:

构造 描述
. 任意字符(可能与行终止符匹配,也可能不匹配)
\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

在上表中,左侧列中的每个构造都是右侧列中字符类的简写。例如,\d 表示数字范围(0-9),\w 表示单词字符(任何小写字母、任何大写字母、下划线字符或任何数字)。尽可能使用预定义类。它们使您的代码更易于阅读,并消除了由格式不正确的字符类引入的错误。

以反斜杠开头的构造称为转义构造。我们在字符串字面值部分中预览了转义构造,其中提到了用于引用的反斜杠和\Q\E。如果在字符串字面值中使用转义构造,必须在反斜杠前面再加一个反斜杠以使字符串编译。例如:

 
private final String REGEX = "\\d"; // 一个数字

在这个例子中,\d 是正则表达式;额外的反斜杠是为了代码能够编译。然而,测试工具从Console直接读取表达式,所以额外的反斜杠是不必要的。

以下示例演示了预定义字符类的使用。

 
输入你的正则表达式: .
输入要搜索的字符串: @
我找到了文本"@",起始位置为0,结束位置为1。

输入你的正则表达式: .
输入要搜索的字符串: 1
我找到了文本"1",起始位置为0,结束位置为1。

输入你的正则表达式: .
输入要搜索的字符串: a
我找到了文本"a",起始位置为0,结束位置为1。

输入你的正则表达式: \d
输入要搜索的字符串: 1
我找到了文本"1",起始位置为0,结束位置为1。

输入你的正则表达式: \d
输入要搜索的字符串: a
没有找到匹配项。

输入你的正则表达式: \D
输入要搜索的字符串: 1
没有找到匹配项。

输入你的正则表达式: \D
输入要搜索的字符串: a
我找到了文本"a",起始位置为0,结束位置为1。

输入你的正则表达式: \s
输入要搜索的字符串:  
我找到了文本" ",起始位置为0,结束位置为1。

输入你的正则表达式: \s
输入要搜索的字符串: a
没有找到匹配项。

输入你的正则表达式: \S
输入要搜索的字符串:  
没有找到匹配项。

输入你的正则表达式: \S
输入要搜索的字符串: a
我找到了文本"a",起始位置为0,结束位置为1。

输入你的正则表达式: \w
输入要搜索的字符串: a
我找到了文本"a",起始位置为0,结束位置为1。

输入你的正则表达式: \w
输入要搜索的字符串: !
没有找到匹配项。

输入你的正则表达式: \W
输入要搜索的字符串: a
没有找到匹配项。

输入你的正则表达式: \W
输入要搜索的字符串: !
我找到了文本"!",起始位置为0,结束位置为1。

在前三个例子中,正则表达式简单地是.(点元字符),表示"任意字符"。因此,在这三种情况下(随机选择的@字符、一个数字和一个字母),匹配都是成功的。剩下的例子中,每个例子都使用了预定义字符类表中的一个正则表达式构造。您可以参考这个表格来了解每个匹配背后的逻辑:

或者,大写字母表示相反的意思:


上一页: 字符类
下一页: 量词