有关正则表达式的教程,这里不再多说。只是简单说一下在编程过程中常遇到的一些问题的解决方案。
首先是验证问题:
验证问题很容易。可以有几种方法
1.直接用String对象提供的matches(String regx)方法。其中regx可以是一个正则表达式
String test0 = " 123456 " ;
System.out.println(test0.matches(reg0));
2.应用java.util.regex.Pattern和java.util.regex.Matcher对象
String test0 = " 123456 " ;
Pattern pattern0 = Pattern.compile(reg0);
Matcher matcher0 = pattern0.matcher(test0);
System.out.println(matcher0.find());
上面两种方法得出的结果当然是一样的了。方法二看似很麻烦,但它却有更强大的功能。就是下面要说的获取
获取问题也有几种方法,至少我知道就有两种。也和上面差不多。
1.应用String提供的replace(String regx)或replaceAll(String regx)方法。两者的区别一看就知道了。下面给个例子
// reg0匹配:一个数字+abc+一个数字
String test0 = " sd4abc56gs " ;
System.out.println(test0.replaceAll(reg0, " A " ));
// 打印出:sdA6gs
// 也即是匹配reg0的字段"4abc5"被代换成了"A"
System.out.println(test0.replaceAll(reg0, " $1 " ));
// 打印出:sdabc6gs
// 也即是匹配reg0的字段"4abc5"被代换成了"$1"也就是正则表达式中匹配括号内的内容
但是,如果要取得匹配组$1的内容,这样匹配后再代换的效率非常低。Java也提供另一种高效的方法。也就是
2.应用java.util.regex.Pattern和java.util.regex.Matcher对象
// reg0匹配:一个数字+abc+一个数字
String test0 = " 4abc56gs " ;
Pattern pattern0 = Pattern.compile(reg0);
Matcher matcher0 = pattern0.matcher(test0);
if (matcher0.find()) {
System.out.println(matcher0.group(1));
}
// 打印出:abc
下面是些常用的正则表达式:
身份证号码: 这是我自己写的包含了15位和18位,还有x|y的情况,但无法对数据的合理性进行检查,比如:111111111111111111
/d{15}(/b|(/d{3}|/d{2}(x|y|X|Y))/b)
日期:这是网上一位牛人写的。一个字--强!(2000-2-29过不了)
^((((1[6-9]|[2-9]/d)/d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]/d|3[01]))|(((1[6-9]|[2-9]/d)/d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]/d|30))|(((1[6-9]|[2-9]/d)/d{2})-0?2-(0?[1-9]|1/d|2[0-8]))|(((1[6-9]|[2-9]/d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$
时间:这是我自己写的24小时制,包含了35小时这种错误的检查
(20|21|22|23|[0-1]?/d):[0-5]?//d:[0-5]?/d$
Email:不知道哪里来的了。反正不是很严密
^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$
/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)* (这个是刚从网上找的,还没有验证过正确性)
手机号码:自己写的,包含以0开头或没有。以13形状的,好像最近开通了新的号码段
/b0?13/d{9}/b
URL地址:刚从网上找的,未验证
http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?
IP地址:刚从网上找的,未验证
^(/d+)/.(/d+)/.(/d+)/.(/d+)$
--原创文章,可以随意复制发表,但请注明出处与作者
BY YCOE