Java复习之正则表达式

3/8/2017来源:ASP.NET技巧人气:3247

这篇博客主要是用来总结一下java中的正则表达式。

1.认识正则

通过一个简单的程序来了解一下正则有哪些好处:

问题:判断一个字符串是否由数字组成

Demo:

/** *不使用正则表达式判断一个字符串是否由数字组成 */ String s="0487561"; //把字符串转换成字符数组 char[] cs=s.toCharArray(); boolean flag=true; for (int i=0;i<cs.length;i++) { if(!(cs[i]<='9'&&cs[i]>='0')) { flag=false; break; } } if(flag==true) { System.out.PRintln("字符串由数字组成"); }else { System.out.println("字符串不是由数字组成"); }

2.正则表达式

正则表达式使用单个字符串来描述,匹配一系列符合某个句法规则的字 符串。正则表达式通常被用来检索、替换那些符合某个模式的文本

java.util.regex包中提供以下两个类,对正则表达式的支持:

Matcher类: 通过解释Pattern对character sequence执行匹配操作的引擎

Pattern类 正则表达式的编译表示形式。

Demo:

/** * 使用正则表达式进行判断 */ if(s.matches("\\d+")) { System.out.println("字符串由数字组成"); } else { System.out.println("字符串不是由数字组成"); }

3.Pattern类

public final class Pattern extends Object implements Serializable

正则表达式的编译表达形式。指定为字符串的正则表达式必须首先被编译为此类的实例

典型的调用顺序: Pattern p = Pattern.compile(“a*b”); Matcher m = p.matcher(“aaaaab”); boolean b = m.matches();

4.Matcher类

public final class Matcher extends Object implements MatchResult

Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定 义完的正则,再使用Matcher类进行验证或者替换。

常用的方法: boolean matches() 尝试将整个区域与模式匹配

String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列

String replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列

//匹配的英文符号 String info="小白是个:高端大气上档次,低调奢华有内涵的人"; //匹配字符串中的标点符号 Pattern pattern =Pattern.compile("\\p{Punct}"); //根据标点符号对字符串进行拆分 String []str= pattern.split(info); for (String s:str) { System.out.println(s); } /** * 使用正则表达式匹配邮箱地址 */ String email="[email protected]QQ.com"; Pattern pattern2 =Pattern.compile("\\[email protected]\\w+.[a-zA-Z]+"); Matcher matcher=pattern2.matcher(email); if(matcher.matches()) { System.out.println("匹配"); } else { System.out.println("不匹配"); } /** * 使用正则表达式替换字符 */ String date="2013/11/05"; Pattern pattern3=Pattern.compile("/"); Matcher m2=pattern3.matcher(date); String s2=m2.replaceAll("-"); System.out.println(s2);

5.String类对正则的支持

在JDK1.4之后加入了正则,随后又更新了String的操作类,因为在 使用正则中,所有的内容通过字符串表示的比较多。在String类中有以下 的方法可以完成对正则表达式的支持:

boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式

String replaceAll(String regex,String replacement) 使用给定的replacement替换此字符串,所有匹配给定的正则表达式的子字符串

String replaceFirst(String regex,String replacement) 使用给定的replacement替换此字符串,匹配给定的正则表达式的第一个字符串

String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串

6.实例

1.验证电话号码(如:010-53517230) 2.验证手机号 3.验证用户名,只能是字母开头的数字、字母或下划线组成

/** * 匹配电话号码 * 区号最少3位,最多4位 X[n,m] 至少n次,不超过m次 */ String phonenumber="010-53517230"; boolean b=phonenumber.matches("\\d{3,4}-\\d{7,8}"); if(b) { System.out.println("电话号码格式正确"); } else { System.out.println("电话号码格式不正确"); } /** * 验证手机号: * 要求:必须为11位,首位必须为1,第二位为3~9,之后的尾数随意 */ String phone="13143188844"; System.out.println(phone.matches("[1][3-9]\\d{9}")); /** * 验证用户名,只能是字母开头的数字、字母或下划线组成 * []表示在这个范围里面 * *表示0次或者多次 * +表示多次 */ String username="xb1314"; System.out.println(username.matches("[a-zA-Z]+[\\w|_]*"));