今天用一个晚上的时间学了正则表达式,感觉受益匪浅,现在把看的东西回顾一下,算是复习。正则表达式全名RegularExpressions,是一种专门处理字符串(字符)的语言吧。或许会问:JAVA中的String已经提供了许多处理字符串的方法,为什么还要用正则表达式呢?我的体会是用正则表达式更加的方便和灵活,往往JAVA用一大段代码描述的功能,用正则只要一句话就可以了。
下面我们来看看最简单的正则表达式吧:
1. "."
eg: "aaa".matches("...");
ps: "aaa"是字符串;
matches()是String类里的方法,返回的是一个boolean类型的值,如果 string和后面正则表达式的内容相匹配返回true,否则false;
"."表示任意的字符,3个"."就表示3个任意的字符,所以这里的"aaa"和
后头的"..."匹配成功,true。
2. "[]"
eg: "war3".matches("[a-za-za-z][0-9]");
ps: "[a-za-za-z]"其实是由三个"[a-z]"组成,[a-z]表示a到z中的一个字母
[0-9]表示的是一个数字。现在就清楚了,[a-za-za-z][0-9]可以匹配3 个小写字母和一个数字。当然这是非常繁琐的,因为一般都用"{}"。
3. "{}"
eg: "war3".matches("[a-z]{1,3}[0-9]");
ps: {1,3}表示可以匹配最多3个英文字母,最少1个英文字母。通过利用{},我 们可以很容易检查相同类型的字符的数量。而JAVA只提供了charAt() ,subString()和indexOf(),用起来相当不方便。值得一提的是{}还有两 种写法。[a-z]{5}表示5个字母,[a-z]{5,}表示至少5个字母。
4. "/d","/w","/s","/."
eg: "war3_1_21".matches("//w{3}//d_//d//_d{2}");
ps: "/d"表示[1-9]
"/w"表示[a-zA-Z_0-9]也就是所有大小写字母,数字以及一根下划线。
看来用"/w"去验证合法的用户名输入是一个不错的主意。
"/s"表示[ /t/n/x0B/f/r],/r回车,/f换页,/换行
"/."表示. 为了不和表示任意字符的"."混淆,用了"/"转义.
而在实际运用中又统统再加了一个"/"这个是JAVA要求的转义字符。
所以都是两个"//"
5. "+","*","?"
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
上头是JDK中的描述,什么意思呢?就比如"[a-z]+"的意思就是有任意多个小写字母,但是不能没有小写字母,我感觉等同于前面讲的"[a-z]{1,}"。再比如"[0-9]*",就是或者没有数字或者有多个数字,就是不能只有一个数字。"+","*","?",常常用在位数不能确定的相同类型的字符。
有了这些知识以后,试着去验证一下一个合法有效的email地址。
这是一个普通的email地址:taochuancheng26@hotmail.com
一般一个合法的email地址必须有一个"@"和一个"."。
而"@"和"."的前后不能为空,必须要有字符。
这如果是给JAVA认证的话,要用一段代码去判断。
而正则表达式则只用一句话:
"taochuancheng26@hotmail.com".matches("//w+@//w+//.//w");
在用户注册的时候,利用正则表达式的强大功能,为检测用户名,密码,email等相关众多信息的合法性提供了一种方便的解决办法。