[abc] a或者b或者c
[\^abc] 除了a、b、c以外的任意字符
[a-zA-Z] a-z和A-Z之间的字符
[a-d[m-p]] a到d或者m-p (并集)
[a-z&&[def]] d、e、f(交集)
[a-z&&[\^bc]] a到z,除了b、c以外(减法)
[a-z&&[\^m-p]] a到z,但不包括m到p(减法)
预定义字符类
. 任何字符(有可能匹配也可能不匹配行结束符号)
\d 一个数字 :[0-9]
\D 一个非数字 :[\^0-9]
\s 一个空格符 : [\t\n\x0B\f\r]
\S 一个非空格符 :[^\s]
\w 一个单词字符:[a-zA-z_0-9]
\W 一个非单词字符
量词
贪婪型 | 勉强型 | 占有型 | 意义 |
---|---|---|---|
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次 |
贪婪性:因为他们试图在第一次匹配前强迫匹配器读入,或者吃入整个字符串。如果第一个匹配失败,匹配器后退一个字符,并重新尝试。一直重复这个步骤直到没有能再后退的字符。
勉强型:接受的是相反的方法,他们在输入字符串的开始处启动,然后每次勉强读入一个字符来寻找匹配。他们所做的是最后尝试读入整个输入字符串。
占有型量词:一直读入整个字符串,每次尝试(且只是一次)一个屁屁额。占有型从不后退,即使这样做会让全局匹配成功。
举例子:
Pattern pattern=Pattern.compile(".*foo");
Matcher matcher=pattern.matcher("xfooxxxfoo");
while (matcher.find())
{
System.out.printf("%s%n",matcher.group());
}
结果:
xfooxxxfoo
Pattern pattern=Pattern.compile(".*?foo");
Matcher matcher=pattern.matcher("xfooxxxfoo");
while (matcher.find())
{
System.out.printf("%s%n",matcher.group());
}
结果:
xfoo
xxxfoo
Pattern pattern=Pattern.compile(".*+foo");
Matcher matcher=pattern.matcher("xfooxxxfoo");
while (matcher.find())
{
System.out.printf("%s%n",matcher.group());
}
结果:空
边界匹配器:
贪婪型 | 意义 |
---|---|
^ | 一行的开始 |
$ | 一行的结束 |
\b | 一个单词的边界 |
\B | 一个非单词边界 |
\A | 输入的开始处 |
\G | 前匹配的结尾处 |
\Z | 除了最后的结束符号,(如果有)之外的输入的结尾处 |
\z | 输入的结尾处 |
例子:
Pattern pattern=Pattern.compile("\\bdog\\b");
Matcher matcher=pattern.matcher("the dog plays in the dogyard");
while (matcher.find())
{
System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
}
结果:
dog
4 7
Pattern pattern=Pattern.compile("\\bdog\\B");
Matcher matcher=pattern.matcher("the dog plays in the dogyard");
while (matcher.find())
{
System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
}
结果:
dog
21 24
Pattern pattern=Pattern.compile("dog");
Matcher matcher=pattern.matcher("the dog plays dog in the dogyard");
while (matcher.find())
{
System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
}
结果:
dog
4 7dog
14 17dog
25 28
Pattern pattern=Pattern.compile("\\Gdog");
Matcher matcher=pattern.matcher("the dogdog plays dog in the dogyard");
while (matcher.find())
{
System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
}
结果:空