Java教程是为JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用已不再可用的技术。
请参阅Java语言变化,了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
Pattern
构造 | 描述 |
---|---|
[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](减法) |
左列指定了正则表达式构造,而右列描述了每个构造在何种条件下匹配。
.class
文件。在正则表达式的上下文中,一个字符类是由方括号括起来的一组字符。它指定了成功匹配给定输入字符串中的一个字符的字符集合。
字符类的最基本形式是将一组字符简单地放在方括号内并排。例如,正则表达式[bcr]at
将匹配单词"bat"、"cat"或"rat",因为它将一个字符类(接受"b"、"c"或"r"中的任意一个)作为其第一个字符。
输入您的正则表达式:[bcr]at 输入要搜索的字符串:bat 我在索引0处找到文本"bat",结束索引为3。 输入您的正则表达式:[bcr]at 输入要搜索的字符串:cat 我在索引0处找到文本"cat",结束索引为3。 输入您的正则表达式:[bcr]at 输入要搜索的字符串:rat 我在索引0处找到文本"rat",结束索引为3。 输入您的正则表达式:[bcr]at 输入要搜索的字符串:hat 未找到匹配项。
在上面的示例中,只有当第一个字母与字符类定义的字符之一匹配时,整体匹配才成功。
要匹配除了列表中列出的字符之外的所有字符,在字符类的开头插入"^
"元字符。这种技术被称为否定。
输入你的正则表达式:[^bcr]at 输入要搜索的字符串:bat 没有找到匹配。 输入你的正则表达式:[^bcr]at 输入要搜索的字符串:cat 没有找到匹配。 输入你的正则表达式:[^bcr]at 输入要搜索的字符串:rat 没有找到匹配。 输入你的正则表达式:[^bcr]at 输入要搜索的字符串:hat 我在索引0处找到了文本"hat",并在索引3处结束。
只有当输入字符串的第一个字符不包含字符类定义的任何字符时,匹配才成功。
有时,你可能想定义一个包括一定范围内的字符类,比如字母"a到h"或数字"1到5"。要指定一个范围,只需在要匹配的第一个和最后一个字符之间插入"-
"元字符,例如[1-5]
或[a-h]
。你还可以在字符类内部将不同的范围放在一起,以进一步扩展匹配的可能性。例如,[a-zA-Z]
将匹配任何字母:a到z(小写)或A到Z(大写)。
下面是一些范围和否定的例子:
输入你的正则表达式:[a-c] 输入要搜索的字符串:a 我在索引0处找到了文本"a",并在索引1处结束。 输入你的正则表达式:[a-c] 输入要搜索的字符串:b 我在索引0处找到了文本"b",并在索引1处结束。 输入你的正则表达式:[a-c] 输入要搜索的字符串:c 我在索引0处找到了文本"c",并在索引1处结束。 输入你的正则表达式:[a-c] 输入要搜索的字符串:d 没有找到匹配。 输入你的正则表达式:foo[1-5] 输入要搜索的字符串:foo1 我在索引0处找到了文本"foo1",并在索引4处结束。 输入你的正则表达式:foo[1-5] 输入要搜索的字符串:foo5 我在索引0处找到了文本"foo5",并在索引4处结束。 输入你的正则表达式:foo[1-5] 输入要搜索的字符串:foo6 没有找到匹配。 输入你的正则表达式:foo[^1-5] 输入要搜索的字符串:foo1 没有找到匹配。 输入你的正则表达式:foo[^1-5] 输入要搜索的字符串:foo6 我在索引0处找到了文本"foo6",并在索引4处结束。
你还可以使用并集创建一个由两个或多个单独字符类组成的单一字符类。要创建并集,只需将一个类嵌套在另一个类内部,例如[0-4[6-8]]
。这个特定的并集创建了一个单一字符类,匹配数字0、1、2、3、4、6、7和8。
输入你的正则表达式:[0-4[6-8]] 输入要搜索的字符串:0 我在索引0处找到了文本"0",并在索引1处结束。 输入你的正则表达式:[0-4[6-8]] 输入要搜索的字符串:5 没有找到匹配。 输入你的正则表达式:[0-4[6-8]] 输入要搜索的字符串:6 我在索引0处找到了文本"6",并在索引1处结束。 输入你的正则表达式:[0-4[6-8]] 输入要搜索的字符串:8 我在索引0处找到了文本"8",并在索引1处结束。 输入你的正则表达式:[0-4[6-8]] 输入要搜索的字符串:9 没有找到匹配。
使用&&
来创建一个仅匹配所有嵌套类中公共字符的单个字符类,例如[0-9&&[345]]
。这个特定的交集创建了一个仅匹配两个字符类中共有数字3、4和5的单个字符类。
输入你的正则表达式:[0-9&&[345]] 输入要搜索的字符串:3 我发现文本“3”从索引0开始,到索引1结束。 输入你的正则表达式:[0-9&&[345]] 输入要搜索的字符串:4 我发现文本“4”从索引0开始,到索引1结束。 输入你的正则表达式:[0-9&&[345]] 输入要搜索的字符串:5 我发现文本“5”从索引0开始,到索引1结束。 输入你的正则表达式:[0-9&&[345]] 输入要搜索的字符串:2 没有找到匹配项。 输入你的正则表达式:[0-9&&[345]] 输入要搜索的字符串:6 没有找到匹配项。
下面是一个显示两个范围交集的示例:
输入你的正则表达式:[2-8&&[4-6]] 输入要搜索的字符串:3 没有找到匹配项。 输入你的正则表达式:[2-8&&[4-6]] 输入要搜索的字符串:4 我发现文本“4”从索引0开始,到索引1结束。 输入你的正则表达式:[2-8&&[4-6]] 输入要搜索的字符串:5 我发现文本“5”从索引0开始,到索引1结束。 输入你的正则表达式:[2-8&&[4-6]] 输入要搜索的字符串:6 我发现文本“6”从索引0开始,到索引1结束。 输入你的正则表达式:[2-8&&[4-6]] 输入要搜索的字符串:7 没有找到匹配项。
最后,你可以使用减法来否定一个或多个嵌套字符类,例如[0-9&&[^345]]
。这个示例创建了一个从0到9匹配所有字符的单个字符类,除了数字3、4和5。
输入你的正则表达式:[0-9&&[^345]] 输入要搜索的字符串:2 我发现文本“2”从索引0开始,到索引1结束。 输入你的正则表达式:[0-9&&[^345]] 输入要搜索的字符串:3 没有找到匹配项。 输入你的正则表达式:[0-9&&[^345]] 输入要搜索的字符串:4 没有找到匹配项。 输入你的正则表达式:[0-9&&[^345]] 输入要搜索的字符串:5 没有找到匹配项。 输入你的正则表达式:[0-9&&[^345]] 输入要搜索的字符串:6 我发现文本“6”从索引0开始,到索引1结束。 输入你的正则表达式:[0-9&&[^345]] 输入要搜索的字符串:9 我发现文本“9”从索引0开始,到索引1结束。
现在我们已经介绍了如何创建字符类,你可能想在继续下一节之前复习一下字符类表。