在生活中,我们会经常会遇到要求你把密码设置为带有数字、英文或下划线等来增强密码的安全,还有验证输入的验证码是否正确,如何编写这种类型的代码?正则表达式就是一个不错的选择,简单而有效。
Java正则表达式
正则表达式(regular expression,简写为regex)是一个字符串,用来描述匹配一个符串集合的模式。可以使用正则表达式来匹配、替换和分割字符串。
1.匹配字符串
String类的matches方法不仅可以匹配固定字符串,还可以匹配一个模式的字符串集。
例1,下面语句的结果都为true:
System.out.println("Java".matches("Java.*"));
System.out.println("Java is cool".matches("Java.*"));
System.out.println("Java is fun".matches("Java.*"));
在前面的语句中的"Java. * "是一个正则表达式。它描述的字符串模式是以字符串Java开始的,后面紧跟任意0个或多个字符。这里,字串. * 与0个或多个字符相匹配。
例2,下面语句的结果为true:
System.out.println("400-02-4534".matches("\\d{3}-\\d{2}-\\d{4}"));
这里 \\d 表示单个数字位,\\d{3}表示三个数字位。
2.替换字符串
正则表达式可以和replaceAll和replaceFirst方法结合在一起使用。
例1,下面语句的结果为aNNNbNNNNNNc:
String s="a+b&#c".replaceAll("[&+#]", "NNN");
System.out.println(s);
replaceAll方法替换所有匹配的子字符串。
例2,下面语句的结果为aNNNb&#c:
String s="a+b&#c".replaceFirst("[&+#]", "NNN");
System.out.println(s);
replaceFirst方法替换第一个匹配的子字符串。
这里的正则表达式[&+#]能够匹配&、+、#的模式。
3.分隔字符串
方法split可以和正则表达式结合在一起使用来实现分隔字符串。
例,下面语句实现了将字符串a+b#c分隔成a,b,c:
String[] s="a+b#c".split("[+&#]");
for(int i=0;i<s.length;++i)
System.out.println(s[i]);
4.正则表达式语法
正则表达式 | 匹配 |
---|---|
x | 指定字符x |
. | 任意单个字符 |
(ab | cd) | ab或者cd |
[abc] | a、b或者c |
[^abc] | 除开a、b或者c以外的任意字符 |
[a-z] | a到z |
[^a-z] | 除开a到z的任意字符 |
[a-e[m-p]] | a到e或m到p |
[a-e&&[c-p]] | a到e与c到p的交集 |
\d | 个位数,等同于[0-9] |
\D | 一位非数字 |
\w | 单词字符 |
\W | 非单词字符 |
\s | 空白字符 |
\S | 非空白字符 |
p* | 模式p的0或者多次出现 |
p+ | 模式p的1或者多次出现 |
p? | 模式p的0或者1次出现 |
p{n} | 模式p的正好n次出现 |
p{n,} | 模式p的至少n次出现 |
p{n,m} | 模式p出现次数位于n和m间(不包含) |
注意:
①单词字符可以是任何的字母、数字或者下划线字符。因此,\w等同于[a-z[A-Z][0-9]_]
②最后六个实体*、+、?、{n}、{n,},以及{n,m}成为量词符,用于确定量词符前面的模式会重复多少次。
③不要在重复量词符中使用空白
④可以使用括号来将模式进行分组
本文章参考《Java 语言程序设计( 基础篇 )》,仅供个人学习使用。