这篇博客主要是用来总结一下Java中的正则表达式。
1.认识正则
通过一个简单的程序来了解一下正则有哪些好处:
问题:判断一个字符串是否由数字组成
Demo:
/** *不使用正则表达式判断一个字符串是否由数字组成 */
String s="0487561";
//把字符串转换成字符数组
char[] cs=s.toCharArray();
boolean flag=true;
for (int i=0;iif(!(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]";
Pattern pattern2 =Pattern.compile("\\w+@\\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|_]*"));