Java 正则表达式全攻略(八)
注释
正则表达式大多都是苦涩难读的,因此我们需要在表达式中添加注释,来增强表达式的可读性。Java 正则的注释以“#”开始,回车结束,而且默认是不开启的。我们可以看看下面的例子:
1: String regex = "(19|20)\\d\\d[- /.]#年,只允许是19或20开头的\n " +
2: "(0?[1-9]|1[012])[- /.]#月,只允许1-12\n " +
3: "(0?[1-9]|[12][0-9]|3[01])#日,只允许1到31 " ;
4:
Pattern p = Pattern.compile(regex, Pattern.COMMENTS);
5: Matcher m = p.matcher("2010.2.21" );
6:
assertThat(m.matches(), is(true));
7: m = p.matcher("1879.1.8" );
8:
assertThat(m.matches(), is(false));
9: m = p.matcher("2010.13.21" );
10:
assertThat(m.matches(), is(false));
11: m = p.matcher("2010.2.32" );
12:
assertThat(m.matches(), is(false));
这样看起来是不是比较清晰呢?
其他
常用的表达式
- Email
^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$ - 十六进制值
^#?([a-f0-9]{6}|[a-f0-9]{3})$ - URL
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$ - 年-月-日
^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$ - IP地址
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ - HTML标签
^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$ - 中文字符
[\u4e00-\u9fa5] - 双字节字符(包括汉字在内)
[^\x00-\xff] - 国内电话号码
^(\d{3}-|\d{4}-)?(\d{8}|\d{7})?$ - 腾讯QQ号
^[1-9]*[1-9][0-9]*$
其他资源
- http://regexlib.com/
强烈推荐的一个网站,想找正则表达式,直接在上面查就可以了 - http://www.regular-expressions.info/
经典的正则表达式教程,国内大部分正则教程的源头,可惜就是E文的