正则表达式

来源:互联网 发布:小明看看地址永久域名 编辑:程序博客网 时间:2024/05/17 19:58
正则表达式:
    1.在程序开发中,经常需要匹配、查找、替换、判断字符串的情况发生。
    2.以前解决这些问题是通过java.lang包中的两个重要的String。
    3.如进行字符串比较的equals()方法。
    4.但当处理的字符串比较复杂时,用String这种纯编码方式解决,往往会浪费程序员的时间及精力。
正则表达式是一种可以用于模式匹配和替换的规范,能使字符串处理简单而高效。

什么是正则表达式?
正则表达式最早是由数学家Stephen Kleene于1956年提出,主要使用在字符字符串的格式比对,后来在信息领域广为应用,现在已经成为ISO(国际标准组织)的标准之一。
在API文件的java.util.regex.Pattern类中找到支持的正则表达式相关信息,可以将正则表达式应用于字符串的比对、取代、分离等动作上。

一个正则表达式就是由普通的字符例如字符( a 到 z)以及特殊字符(元字符)组成的文字模式[记住它是个文字模式],它用以描述在查找文字主体时待匹配的一个或多个字符串。

正则表达式规则...........................................................
.——句点符号
[]——方括号符号
|——或符号
表示匹配次数的符号
^——否符号
其他符号


    1、句点符号:.句点符号是一个通配符,匹配所有字符,包括空格、Tab字符甚至换行符。

    []:  []里面存在某个单个字符,与我们待匹配的字符一样,就算匹配成功。
                    tan
                    ten
    如:t.n    ------>    tin      匹配都成功;t.n中间的.可由任意字符匹配,tan,ten,tin,ton都可以。
                    ton
public static void main(String[] args) {
        String regex = "t.n";  //定义正则表达式regex = "t.n";
        String str1 ="tan";
        String str2 ="ten";
        String str3 ="tin";
        String str4 ="ton";
        
        System.out.println(str1.matches(regex));//用String类的方法matches(regex)匹配,返回true
        System.out.println(str2.matches(regex));
        System.out.println(str3.matches(regex));
        System.out.println(str4.matches(regex));
}

句点优点是通用,同时缺点也是通用
为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号“[]”里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。
也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符 。方括号表示可能出现的单个字符。

    2、方括号符号
    方括号“[]”里面指定看来有意义的字符。只有方括号里面指定的字符才参与匹配。

                        tan
                        ten
    如t[aeio]n ---->    tin  匹配都成功,都返回true;
                        ton

        String regex = "t[aeio]n";//“[]”内指定的字符,才可参与匹配
        String str1 ="tan";
        String str2 ="ten";
        String str3 ="tin";
        String str4 ="ton";
        
        System.out.println(str1.matches(regex));
        System.out.println(str2.matches(regex));
        System.out.println(str3.matches(regex));
        System.out.println(str4.matches(regex));

句点和方括号只匹配单个字符,如果要匹配多个字符就要看或运算符——“|”。
在上例中,如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。
“|”操作符的基本意义就是“或”运算。

    3、|: 或
    要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。
    这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组,具体请参见后面介绍。
                              tan
                              ten
    如:t(a|e|XXX|oo)n ------>tXXXn   匹配都成功,都返回true;
                              toon

        String regex = "t(a|e|XXX|oo)n";
        String str1 ="tan";
        String str2 ="ten";
        String str3 ="tXXXn";
        String str4 ="toon";
        
        System.out.println(str1.matches(regex));
        System.out.println(str2.matches(regex));
        System.out.println(str3.matches(regex));
        System.out.println(str4.matches(regex));    

    4、遇到单个字符的重复问题,就要看下面的符号表了。这些符号用来确定紧靠该符号左边的符号出现的次数。这些符号也被称为“贪婪量词”。
X表示字符
X?         X,一次或一次也没有
X*         X,零次或多次
X+         X,一次或多次
X{n}     X,恰好 n 次
X{n,}     X,至少 n 次
X{n,m}     X,至少 n 次,但是不超过 m 次


    5、^ :在句前表示开头;在[]里面的表示否定。
        “^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。
        例如,正则表达式[^x][a-z]+,是要匹配所有单词,但以“X”字母开头的单词除外。


    如:String regex = "t[^aeio]n";要匹配t.n但中间字符不能是aeio。


应用小案例:

1、身份证号码验证:(15位,18位)
    String regex="\\d{15}|\\d{18}|\\d{17}X";    //\\d{15}表示要匹配数字,重复出现15次

2、一个月天数:
    String regex="(0?[1-9])|(1|2)[0-9]|30|31";
3、假设我们要在文本文件中搜索美国的社会安全号码。号码的格式是999-99-9999
    正则表达式:[0-9]{3}  \-[0-9]{2} \- [0-9]{4}
        //[0-9]{3}   表示0-9任意数重复出现3次

.....................................................................................

在String类中,matches()方法可以让您验证字符串是否符合指定的正则表达式,这通
常用于验证使用者输入的字符串数据是否正确,例如电话号码格式。

除此之外,还有在API文件的java.util.regex.Pattern类中找到支持的正则表达式相
关信息,可以将正则表达式应用于字符串的比对、取代、分离等动作上。

String上可使用正则表达式的操作,实际上是利用了java.util.regex.Pattern与
java.util.regex. Matcher的功能。当调用String的matches()方法时,实际上是
调用Pattern的静态方法matches(),这个方法会返回boolean值,表示字符串是否
符合正则表达式。

如果想要将正则表达式视为一个对象来重复使用,可以使用Pattern的静态方法compile()进行编译。
compile()方法会返回一个Pattern的实例,这个实例代表正则表达式,之后就可以重复使用Pattern实例的matcher()方法来返回一个Matcher的实例。

        String regex = "\\d+";
        String str = "22aa222";
        
        Pattern p = Pattern.compile(regex);//返回一个Pattern的实例,这个实例代表正则表达式
        Matcher m = p.matcher(str);
        System.out.println(m.matches());



2 0
原创粉丝点击