·正则表达式使用的时候要注意几个特殊的符号
1). 这个符号是可以表示任意字符,不是数字里的小数的点在我对一些数字做处理的时候经常忘记这个点,总是用一般的.去写这样做普通的测试并没有什么bug,但是如果这个写.的地方写了别的字符运行起来可能会有很多意想不到的错误!
// 验证小数
String s2 = "-123.321";
String regex2 = "(-|\\+)?\\d+" + ".(\\d+)?";
System.out.println("小数验证:" + s2 + "\t\t" + s2.matches(regex2));
上面的.就没有做特别的转译,而且结果也达到了预期的效果。
可是。。。
// 验证小数
String s2 = "-123a321";
String regex2 = "(-|\\+)?\\d+" + ".(\\d+)?";
System.out.println("小数验证:" + s2 + "\t\t" + s2.matches(regex2));
输出结果:
没错 这就是一个致命的错误!就是因为没有对.进行转译
我们修改上面的代码再看看
// 验证小数
String s2 = "-123a321";
String regex2 = "(-|\\+)?\\d+" + "\\.(\\d+)?";
System.out.println("小数验证:" + s2 + "\t\t" + s2.matches(regex2));
输出结果:
所以在写这个的时候一定要注意转译!
2)[]的使用,这个中括号是选择正则其中正则表达式的一个,是或者的意思,里面不要使用正则表达式的或(|)符号了。
3)|的使用在单独使用的时候不容易出现什么错误,但是在写复杂的正则表达式的时候很容易忘记是和谁| 比如:
String tel = "(010)-12345678";
String regex4 = "((\\d{3,4}-?)?|(\\(\\d{3,4}\\)-?)?)\\d{7,8}";
System.out.println("电话号码验证:" + tel + "\t\t" + tel.matches(regex4));
如果不去写|两边的括号意思就完全变了
String regex4 = "(\\d{3,4}-?)?|(\\(\\d{3,4}\\)-?)?\\d{7,8}";
这样就成了(\d{3,4}-?)?或者(\(\d{3,4}\)-?)?\d{7,8}”了,而我的本意并不是如此所以这里一定要注意!
一个总结性的小程序,和前面的正则练习123456差不多
/**
* --------------逆水行舟,不进则退-------------
* */
public class Test {
public static void main(String[] args) {
// 验证整数
String s1 = "123";
String regex1 = "(-|\\+)?\\d+";
System.out.println("整数验证:" + s1 + "\t\t" + s1.matches(regex1));
// 验证小数
String s2 = "-123a321";
String regex2 = "(-|\\+)?\\d+" + "\\.(\\d+)?";
System.out.println("小数验证:" + s2 + "\t\t" + s2.matches(regex2));
// 用户名以非数字开头(用户名共10位)
String user = "w123123_2";
String regex3 = "[a-zA-Z_]\\w{5,9}";
System.out.println("用户名验证:" + user + "\t\t" + user.matches(regex3));
// 电话号码的验证
/*
* 大致步骤: 分析电话号码的写法有几种:(1)、直接写电话号 "\\d{7,8}" (2)、区号电话号
* "\\(d{3,4})?\\d{7,8}" (3)、区号"-"电话号 "(\\d{3,4}-?)?\\d{7,8}"
* (4)、(区号)"-"电话号 "((\\d{3,4}-?)?|(\\(\\d{3,4}-?\\))?)\\d{7,8}"
* 然后写正则表达式: ((\\d{3,4}-?)?|(\\(\\d{3,4}\\)-?)?)\\d{7,8}
*/
String tel = "(010)-12345678";
String regex4 = "((\\d{3,4}-?)?|(\\(\\d{3,4}\\)-?)?)\\d{7,8}";
System.out.println("电话号码验证:" + tel + "\t\t" + tel.matches(regex4));
// 验证邮箱
String youxiang = "qwer@qq.com";
String regex5 = "[a-zA-Z_][a-zA-Z_\\.]+@[a-zA-z_\\.]+\\.(com|net|cn)";
System.out.println("邮箱验证:" + youxiang + "\t\t"
+ youxiang.matches(regex5));
}
}
4)加强对正则的其他符号了解
可以查阅api文档这里是截图:
如有错误,请指点。