Java正则表达式总结
Java正则表达式通过java.util.regex包下的两个类:Pattern和Matcher实现的。用法如下:
- 首先引入java包:java.util.regex.*(当然,使用java.util.regex.Matcher+java.util.regex.Pattern也是一样的。)
- 具体使用如下:①通过Pattern对象构造一个模式,具体代码为(某个特例):Pattern p = Pattern.compile("[a-z]*"); ② 构造一个匹配器,Matcher m = p.matcher(str); (注意:此处str为待匹配的字符串); ③进行判断,得到结果:boolean b = m.matches() 。【说明】:关于Matcher类进行匹配操作时,它提供了三种方法,这三种方法返回值均为boolean类型:匹配成功,则返回true,否则返回false。
正则表达式中,各符号的含义如下(可以结合范例进行进一步学习):
- .表示任意一个字符;
- \s表示空白字符(如:空格符、换行符、制表符、回车等);
- \S表示非空格字符;
- \d表示一个数字,相当于[0-9];
- \D表示一个非数字的字符,相当于[^0-9];
- \w表示一个单词字符,相当于[]
- \W表示一个非单词的字符,相当于[^\w];
- ^表示一行的开始;
- $表示一行的结尾;
- \b表示一个单词的边界;
- \B表示一个非单词的边界;
- \G表示前一个匹配结束;
- []表示匹配方括号内的一个字符,例如:[abc](或[a,b,c])表示字母a,b,c中的任意一个;[a-zA-Z](或[a-z,A-Z])表示a-z,A-Z中的任意一个字符;
- *表示重复0次或更多次,如a*表示匹配0个或更多个a;
- +表示重复1次或更多次,如a+表示匹配1个或多个a;
- {n}表示重复n次,如a{4}表示匹配4个a;
- {n,}表示重复n次或更多次,如a{4,}表示匹配至少4个a;
- {n,m}表示重复n到m次,如a{4,10}表示匹配4-10个a。
下面,我们用例子加以说明:
例1、我们约定好的正则表达式为a*b,即以a开始,b结尾的字符串,代码如下:
1 import java.util.regex.*;
2
3 public class RegTest {
4 static void test()
5 {
6 Pattern p = null; // 正则表达式
7 Matcher m = null; // 操作的字符串
8 boolean b = false;
9
10 // 正则表达式表示首字母是a,中间是任意字符,结尾以b结束
11 // 不匹配的结束
12 p = Pattern.compile("a*b");
13 m = p.matcher("baaaaaab");
14 b = m.matches();
15
16 // 输出匹配结果
17 System.out.println("匹配结果:"+b);
18
19 p = Pattern.compile("a*b");
20 m = p.matcher("aaaab");
21 b = m.matches();
22
23 System.out.println("匹配结果:"+b);
24 }
25
26 public static void main(String argv[])
27 {
28 test();
29 }
30 }
输出结果为:
匹配结果:false
匹配结果:true
例2、判断手机号码是否正确的范例:
1 import java.util.regex.*;
2
3 public class RegTest02 {
4 static void test()
5 {
6 Pattern p = null; // 正则表达式
7 Matcher m = null; // 操作的字符串
8 boolean b = false;
9
10 // 正则表达式表示第一位是1,第二位为3或5,结尾为9为数字的遗传数字
11 p = Pattern.compile("^[1][3,5,8]+\\d{9}");
12 m = p.matcher("13816152945");
13 b = m.matches();
14 if(b) System.out.println("恭喜您,手机号码输入正确!");
15 else System.out.println("很遗憾,手机号码输入错误!");
16
17 m = p.matcher("123456789");
18 b = m.matches();
19 if(b) System.out.println("恭喜您,手机号码输入正确!");
20 else System.out.println("很遗憾,手机号码输入错误!");
21 }
22
23 public static void main(String argv[])
24 {
25 test();
26 }
27 }
输出为:
恭喜您,手机号码输入正确!
很遗憾,手机号码输入错误!
例3、
1 import java.util.regex.*;
2
3 public class RegTest02 {
4 static void test()
5 {
6 Pattern p = null; // 正则表达式
7 Matcher m = null; // 操作的字符串
8 boolean b = false;
9
10 // 邮箱号码的正则表达式,
11 p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
12 m = p.matcher("lijihong0723@qq.ocm");
13 b = m.matches();
14 if(b) System.out.println("恭喜您,邮箱号码输入正确!");
15 else System.out.println("很遗憾,邮箱号码输入错误!");
16
17 m = p.matcher("www.shu.edu.cn");
18 b = m.matches();
19 if(b) System.out.println("恭喜您,邮箱号码输入正确!");
20 else System.out.println("很遗憾,邮箱号码输入错误!");
21 }
22
23 public static void main(String argv[])
24 {
25 test();
26 }
27 }
输出为:
恭喜您,邮箱号码输入正确!
很遗憾,邮箱号码输入错误!
上述代码中,正则表达式为:
"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"
注意:其中第一个\为转义字符。
该表达式说明,邮箱号码以一个单词开始,其后可以跟上+-.开始的0个或多个单词,然后必须要有@,最后紧接着一个单词(例如qq,sina之类的),然后是其他一些域名单词,最后跟着一个所属国家,例如中国:cn等。
【参考文献】