正则表达式

来源:互联网 发布:网络科技时代 编辑:程序博客网 时间:2024/06/03 19:32

在程序设计的过程中,经常需要对输入的数据格式进行检查,这时就会用到正则表达式,匹配正则表达式则数据格式正确,否则格式错误。

正则表达式(Regex)表达式正确的使用规则:

◆       1,字符串匹配◆       2,指定字符串替换 ◆       3,指定字符串查找◆       4,字符串分割

判断是否符合正则表达式的方法

为了检查输入的数据是否满足某种格式,从JDK1.4开始使用String类的matches()方法进行判断。

boolean matches(String regex)

◇ regex:指定的正则表达式。
◇ 返回值:返回boolean类型。

该方法用于告知当前字符串是否匹配参数regex指定的正则表达式。返回值是boolean类型,如果当前字符串与正则表达式匹配,则该方法返回true,否则返回false。


正则表达式中的两种形式的元字符

正则表达式由一些含有特殊意义的字符组成的字符串,这些含有特殊意义的字符称为元字符。


正则表达式中的元字符

不用方括号的字符连接。

元字符 正则表达式中的写法 含义 . “.” 代表任意一个字符 \d “\d” 代表0~9的任何一个数字 \D “\D” 代表任何一个非数字字符 \s “\s” 代表空白字符,如”\t”、”\n” \S “\S” 代表非空白字符 \w “\w” 代表可用作标识符的字符,但不包括“¥” \W “\W” 代表不可用于标识符的字符 \p{Lower} “\p{Lower}” 代表小写字母{a~z} \p{Upper} “\p{Upper” 代表大写字母{A~Z} \p{ASCII} “\p{ASCII}” ASCII字符 \P{Alpha} “\P{Alpha}” 字母字符 \p{Digit} “\p{Digit}” 十进制数字,即[0~9] \p{Alnum} “\p{Alnum}” 数字或字母字符 \p{Punct} “\p{Punct}” 标点符号:!”#$%&’()*+,-./:;<=>?@[]^_’{ \p{Graph} “\p{Graph}” 可见字符:[\p{Alnum}\p{Punct}] \p{Print} “\p{Print}” 可打印字符:[\p{Graph}\x20] \p{Blank} “\p{Blank}” 空格或制表符:[\t] \p{Cntrl} “\p{Cntrl}” 控制字符:[\x00-\x1F\x7F]

在正则表达式中,”.“代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符”.“,必须使用转义字符”\“。

Demo

在项目中创建Decision类,判断指定字符串是否合法,要求字符串由7个字符组成,并且第一位必须是大写字母,2~4位必须是小写字母,后3位必须是数字字符,并在控制台输出结果。

public class Decision {    public static void main(String[] args) {        //需要进行判断的字符串        String s="Ajik432";        String s1="ajik432";        //字符串合法的规则        String s2="\\p{Upper}\\p{Lower}\\p{Lower}\\p{Lower}\\p{Digit}\\p{Digit}\\p{Digit}";            //判断字符串变量是否合法        boolean s4=s.matches(s2);        boolean s5=s1.matches(s2);        //输出结果        System.out.println(s+"是合法数据吗?"+s4);        System.out.println(s1+"是合法数据吗?"+s5);    }}

结果:

Ajik432是合法数据吗?true
ajik432是合法数据吗?false


方括号中的元字符

在正则表达式中还可以用方括号把多个字符括起来,方括号中各种正则表达式代表不同的含义。

字符 含义 [abc] 表示a、b或者c [^abc] 表示a、b和c之外的任何字符 [a-zA-Z] a~z或A~Z的任何字符 [a-d[m-p]] a~d或m~p的任何字符 [a-z&&[def] d、e或者f [a-z&&[^bc]] a~z之间不含b和c的所有字符 a-z&&[^m-p]] a~z之间不含m~p的所有字符

Demo

在项目中创建CheckHandSetNum类,在主方法中创建String对象,使用正则表达式对手机号码的合法性进行验证,在使用正则表达式时需要用到一些元字符和方括号中的元字符。

public class CheckHandSetNum {    public static void main(String[] args) {        //定义要验证的号码        String telephone1="11024588795";        String telephone2="15044268138";        System.out.println(check(telephone1));        System.out.println(check(telephone2));    }    public static String check(String handset){        //定义正则表达式        String regex="1[3,5,7,8]\\d{9}$";        //测试匹配结果        if(handset.matches(regex)){            return handset+"\n是合法的手机号";        }else{            return handset+"\n不是合法的手机号";        }    }}

结果:

11024588795
不是合法的手机号
15044268138
是合法的手机号


正则表达式的限定符

在使用正则表达式时,如果需要某一类型的元字符多次输出,逐个输入就相当麻烦,这时可以使用正则表达式的限定元字符来重复次数。

数量表示:

限定修饰符 意义 示例 必须出现一次 A ? 0次或1次 A? * 0次或多次 A* + 0次或多次 A+ {n} 正好出现n次 A{2} {n,} 至少出现n次 A{3,} {n,m} 出现n~m次 A{2,6}

如上个例子中的

    String s2="\\p{Upper}\\p{Lower}\\p{Lower}\\p{Lower}\\p{Digit}\\p{Digit}\\p{Digit}";

可以由限定符写成

    String s2="\\p{Upper}\\p{Lower}{3}\\p{Digit}{3}";

结果是相同的,但是书写就会方便很多。

Demo:

在项目中创建Judge类,在方法中创建String对象,实现使用正则表式来判断指定的变量是否是合法的E-mail地址。

public class Judge {    public static void main(String[] args) {        //正则表达式,定义邮箱格式        String regex="\\w{0,}\\@\\w{1,}\\.{1}\\w{0,}";        //定义字符串        String str1="aaa@.com";        String str2="aaaaa";        String str3="aaaaa@111.com";        //判断字符串是否符合规则        if(str1.matches(regex)){            System.out.println(str1+"是一个邮箱地址");        }        if(str2.matches(regex)){            System.out.println(str2+"是一个邮箱地址");        }        if(str3.matches(regex)){            System.out.println(str3+"是一个邮箱地址");        }        else{            System.out.println("都不是邮箱地址");        }    }}   

结果:

aaaaa@111.com是一个邮箱地址

逻辑运算符:

描述 示例 X规范跟着Y规范 XY X规范或Y规范 X-Y 做为一个捕获组规范 (x)

Demo

在项目中创建CheckIPAdress类,判断输入的IP地址每个字符是否符合匹配IP地址的正则表式,每个字符串都匹配是合法的IP地址。

public class CheckIPAdress {    public static void main(String[] args) {        //创建判定的IP        String ip1="255.255.255.255";        String ip2="192.168.5.6";        System.out.println(matches(ip1));        System.out.println(matches(ip2));    }    public static String matches(String text){        if(text!=null && !text.isEmpty()){        //定义正则表达式        String regex="^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."                     +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."                     +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."                     +"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";        //测试匹配结果        if(text.matches(regex)){            return text+"\n是合法的IP";        }else{            return text+"\n不是合法的IP";        }        }        return "请输入要验证的IP地址!";    }}

结果:

255.255.255.255
是合法的IP
192.168.5.6
是合法的IP

原创粉丝点击