可以从比较简单的东西入手学习正则表达式。要想全面地掌握怎样构建正则表达式,可以去看JDK文档的java.util.regex的Pattern类的文档。
字符B | 字符B |
\xhh | 16进制值0xhh所表示的字符 |
\uhhhh | 16进制值0xhhhh所表示的Unicode字符 |
\t | Tab |
\n | 换行符 |
\r | 回车符 |
\f | 换页符 |
\e | Escape |
正则表达式的强大体现在它能定义字符集(character class)。下面是一些最常见的字符集及其定义的方式,此外还有一些预定义的字符集:
字符集表示任意一个字符 | |
[abc] | 表示字符a,b,c中的任意一个(与a|b|c相同) |
[^abc] | 除a,b,c之外的任意一个字符(否定) |
[a-zA-Z] | 从a到z或A到Z当中的任意一个字符(范围) |
[abc[hij]] | a,b,c,h,i,j中的任意一个字符(与a|b|c|h|i|j相同)(并集) |
[a-z&&[hij]] | h,j中的一个(交集) |
\s | 空格字符(空格键,tab,换行,换页,回车) |
\S | 非空格字符([^\s]) |
\d | 一个数字,也就是[0-9] |
\D | 一个非数字的字符,也就是[^0-9] |
\w | 一个单词字符(word character),即[a-zA-Z_0-9] |
\W | 一个非单词的字符,[^\w] |
如果你用过其它语言的正则表达式,那么你一眼就能看出反斜杠的与众不同。在其它语言里,"\\"的意思是"我只是要在正则表达式里插入一个反斜杠。没什么特别的意思。"但是在Java里,"\\"的意思是"我要插入一个正则表达式的反斜杠,所以跟在它后面的那个字符的意思就变了。"举例来说,如果你想表示一个或更多的"单词字符",那么这个正则表达式就应该是"\\w+"。如果你要插入一个反斜杠,那就得用"\\\\"。不过像换行,跳格之类的还是只用一根反斜杠:"\n\t"。
这里只给你讲一个例子;你应该JDK文档的java.util.regex.Pattern加到收藏夹里,这样就能很容易地找到各种正则表达式的模式了。
逻辑运算符X 后面跟着 Y | |
X|Y | X或Y |
(X) | 一个"要匹配的组(capturing group)". 以后可以用\i来表示第i个被匹配的组。 |
^ | 一行的开始 |
$ | 一行的结尾 |
\b | 一个单词的边界 |
\B | 一个非单词的边界 |
\G | 前一个匹配的结束 |
举一个具体一些的例子。下面这些正则表达式都是合法的,而且都能匹配"Rudolph":