Java正则表达式总结

  Java正则表达式通过java.util.regex包下的两个类:Pattern和Matcher实现的。用法如下:

  1. 首先引入java包:java.util.regex.*(当然,使用java.util.regex.Matcher+java.util.regex.Pattern也是一样的。)
  2. 具体使用如下:①通过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等。

【参考文献】

百度文库:http://wenku.baidu.com/view/fcdf770bf78a6529647d5321.html?from=rec&pos=0&weight=11&lastweight=3&count=5

posted @ 2012-03-30 16:14  lijihong0723  阅读(1049)  评论(1编辑  收藏  举报
页脚测试