本帖最后由 Dreamhui 于 2018-8-29 12:44 编辑
基础班还没毕业,脸皮厚一点也发个技术贴,奉上自己的Java学习笔记一篇——正则表达式: 1. 正则支持在java1.4版本正式引入,API中java.util.regex包下提供了2个类用 于对正则的支持,分别为:Matcher类、Pattern类(构造方法私有化)。其中Pattern类用于编译正则,Matcher类提供了许多用于匹配正则标记的方法,Matcher类对象可由Pattern类的成员方法取得。开发过程中,除非遇到相当复杂的正则验证,否则很少直接使用这两个类。 2. 关于正则,最为重要的是String类对其的支持,String类中支持正则的方法有: public boolean matches (String regex) | public String replaceAll (String regex, String replacement) | public String replaceFirst(String regex, String replacement) | public String[] split(String regex) | public String[] split(String regex, int limit) |
3. Pattern类中的常用正则标记(熟记并熟练使用): 3.1 单个字符(数量为1): —”单个字符”:判断用于匹配的是否为一个该字符,是则返回true,不是则返回false 范例: public class RegexTest {
public static void main(String[] args) {
String str = "a";
String regex = "x";
System.out.println(str.matches(regex));
}
} 输出结果为false;(仅当regex = “a”时结果为true) |
3.2 字符集(数量为1): —[abc]:是a、b、c中的某一个; —[^abc]:^表示取反,即不是a、b、c中的某一个; —[a-zA-Z] :表示为一个字母(不区分大小写); —[0-9]:表示为0-9的某一数字 —[a-zA-Z0-9]:表示为字母或数字 —[a-d[m-p]] :表示为a-d或m-p的某一字母,可写为[a-dm-p]; —[a-z&&[def]] :表示为d、e、或f; —[a-z&&[^bc]] :a-z排除b和c —[a-z&&[^m-p]] :同上 3.3 字符集的简写形式:(数量为1) — . :Any character (may or may not match line terminators) 表示字符 — \d :A digit: [0-9] —\D :A non-digit: [^0-9] —\s :A whitespace character: [ \tundefined\x0B\f\r] 空字符 —\S :A non-whitespace character: [^\s] 非空字符 —\w :A word character: [a-zA-Z_0-9] 字母、数字、或下划线 —\W :A non-word character: [^\w] 对上取反 3.4 正则标记的数量判断: —X? :X, once or not at all (X出现一次或者不出现) —X* :X, zero or more times (X出现0次或者多次) —X+ :X, one or more times (X至少出现1次) —X{n} :X, exactly n times (X出现n次) —X{n,} :X, at least n times (X至少出现n次) —X{n,m} :X, at least n but not more than m times (X出现n~m次,包括n、m) 注意:其中“X”可表示单个字符或一个正则表达式:”a+” --- ”a”至少出现1次;”[a-zA-Z]{1,8}”---表示字母出现1-8次。 3.5 正则表达式的逻辑组合: —XY :X followed by Y (X出现后紧跟着出现Y) —X|Y :Either X or Y (X出现或者Y出现) —(X) :X, as a capturing group (X作为一个整体同时出现) 注意:其中,“X”和“Y”均可表示单个字符或者一个正则表达式:"[a-zA-Z]+@\\w+\\.(com|cn)"表示由“字母@ 字母、数字、下划线 . com”或“字母@ 字母、数字、下划线 . cn”组成; 范例如下: public class RegexTest {
public static void main(String[] args) {
String str = "hello@123_a.com";
String regex = "[a-zA-Z]+@\\w+\\.(com|cn)";
System.out.println(str.matches(regex));
}
} 输出结果为true。 |
*******正则的使用关键在于有效的组合!*******
在使用正则组合进行复杂验证时,要十分注意正则表达式的逻辑顺序,灵活运用逻辑关系,做到正确而优雅(简单明了、布局合理)。 注意事项:编写正则表达式时,要小心转义字符,单个“\”表示转义,“\\”表示一个“\”,如:“\d”应写为“\\d”、“.”应写为“\\.”。 综合范例: public class RegexTest {
public static void main(String[] args) {
/*
* 验证电话号码
* */
String str = "010-57171490";
String regex = "(\\(\\d{3}\\)-|\\d{3}-)?\\d{7,8}";
System.out.println(str.matches(regex));
/*
* 单个字符的数量组合
* */
System.out.println("========================");
String str1 = "aaaa";
String regex1 = "a{4}";
System.out.println(str1.matches(regex1));
/*
* 邮箱的验证:abc123_a123d . ass123 @ qqmail . com
* 要求:
* 1.第一部分由字母、数字、下划线组成,且必须以字母开头,以字母或数字结尾,长度不超过30
* 2.第二部分由字母、数字组成,长度不超过10
* 3.第三部分以小写字母组成,长度不超过6
* 4.以com、cn、com.cn、avg或edu结尾
*
* */
System.out.println("========================");
String str2 = "a1231_asd.01gmh12@qqmail.avg";
String regex2 = "[a-zA-Z]\\w{1,28}[a-zA-Z0-9]\\.[a-zA-Z0-9]{1,10}@[a-z]{1,6}\\.(com|cn|com.cn|avg|edu)";
System.out.println(str2.matches(regex2));
}
}
|
[tr][/tr][/table]
[table]
|