Java-正则表达式
常用正则表达式语法
(1) 匹配开头结尾
^
匹配字符串开头
$
匹配字符串结尾
(2) 匹配单个字符
.
匹配任意1个字符(除了"\r\n"
)
[ ]
匹配[ ]中列举的任一字符
\d
匹配数字,等效于[0-9]
\D
匹配非数字,等效于[^0-9]
\s
匹配空白,即 空格,制表符等,等效于[\f\n\r\v]
\S
匹配非空白,等效于[^\f\n\r\v]
\w
匹配单词字符,包括下划线。等效于[A-Za-z0-9_]
\W
匹配非单词字符,等效于[^A-Za-z0-9_]
\b
匹配一个字边界,“er\b”匹配“never”中的"er",但是不匹配“verb”中的“er”
\B
非字边界匹配
\f
换页符匹配
\n
换行符匹配
\r
回车符匹配
\t
制表符匹配
\v
垂直制表符匹配
(3) 匹配多个字符
*
匹配前一个字符出现0次或者无限次,即可有可无
+
匹配前一个字符出现1次或者无限次,即至少有1次
?
匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}
匹配前一个字符出现m次
{m,n}
匹配前一个字符出现从m到n次
[0-9]{6}:匹配连续6个0-9之间的数字
2 应用
验证用户密码:"^[a-zA-Z]\w{5,17}$"
正确格式为:以字母开头,长度在6~10之间,只能包含字母、数字和下划线。
m-n位的数字:^\d{m,n}$
public class RegexDemo {
public static void main(String[] args) {
String pattern = "^[a-zA-Z]\\w{5,9}$";
//^[a-zA-Z]匹配一个开头的字母
//\w{5,9}匹配5-9个单词字符(字母数字下划线)
Pattern p = Pattern.compile(pattern);
System.out.print(p.matcher("abc5678908").matches());
}
}
注意:
在其他语言中,\\
表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。
在 Java 中,\\
表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \\
代表其他语言中的一个 \
,这也就是为什么表示一位数字的正则表达式是 \\d
,而表示一个普通的反斜杠是 \\\\
。