有关正则表达式的教程,这里不再多说。只是简单说一下在编程过程中常遇到的一些问题的解决方案。
首先是验证问题:
验证问题很容易。可以有几种方法
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