java正则表达

正则表达式的概念:在程序中经常需要对字符串这类数据进行合法的验证,如果没有其他的新技术,就只能采用字符串中

原始方法进行截取等各种判断,这样代码书写量很大,并且不利于程序的维护‘

于是,就提供了更加简便的技术来验证码字符串这类数据。这个技术就叫做正则表达式,

正则表达式:正确的规则组成的一个表达式,它可以验证其他的字符串数据的合法性。

正则表达式的书写规则

正则表达式是验证字符串:在正则表达式中书写的规则是限定字符串中不同位置上可以出现哪些字符数据。、

正则的书写:正则表达式的体现也是字符串,


现在验证字符串数据:"abc",条件是:第一位上只能书写小写啊,第二位上上可以书写b或c,第三位上写c或d或e;

则正则表达式为:a[bc][cde];

字符类:


解释正则表达式中[]的用法:书写[] 中的内容,是用来验证字符串中某个位置上可以书写的字符数据


 

字符串数据:”13499990000” 

正则表达式:”1[34578][0-9]”验证前三位


解释正则表达式中{} 的用法:

         X{N} X表达式的是正则的规则,后面的{N} 表达式的是前面的正则规则所在位置往后可以出现的次数

 

字符串数据:”13499990000” 

正则表达式:”1[34578][0-9]{9}” 这个规则规定需要被验证的字符串中的第一位只能数字1,第二位是可以3、4、5、7、8中的任何一个,从第三位开始可以是0-9中的任何一个,一直到第11位。

 

X?    X依然是正则的规则,?表达式的是X这个规则可以出现零次或一次

X*    X依然是正则的规则,*表达式的是X这个规则可以出现零次或者多次

X+    X依然是正则的规则,+表达式的是X这个规则可以出现一次或者多次

字符串数据:”abc“

正则规则:”a?”


字符串数据:”abcABC”

正则规则:”.bcABC”  说明:当前的正则规定的字符串的第一位上可以是任何的字符数据

字符串数据:”13499990000” 

正则表达式:”1[34578]\\d{9}”


 

. 表示任意字符数据

\d 表示数字字符

\w 表示字母 数字 下划线  (注意:没有 $ 符号)


正则演示:

验证手机号:

public class TelNumberCheck {

    public static void main(String[] args) {

       

        //定义正则规则

        Stringregex = "1[34578][0123456789]\\d{8}";

       

        Stringtel = "13345678901";

       

        //验证

        booleanb = tel.matches(regex);

        //System.out.println(b);

        if( b ){

            System.out.println("手机号码正确");

        }else{

            System.out.println("手机号码有误");

        }

       

    }

}


正则常用功能:

1匹配功能

使用String类的matches方法完成;

/*

 * 简单验证身份证号码正确性

 */

public class IDCardCheck {

    public static void main(String[] args) {

       

        //需要被验证的字符串数据

        StringidCard = "11012219901212567X";

        //正则的规则

        Stringregex = "[1-9][0-9]{5}[12][0-9]{3}[01][0-9][0123][0-9]\\d{3}[0-9Xx]";

       

        //调用String类中的匹配方法验证

        booleanb = idCard.matches(regex);

        System.out.println(b);

    }

}

2,切割功能


public static void method2() {

 

        // 需要被切割的字符串数据

        Strings = "abc....qwe..jk.........2322...22bcd.....3324";

 

        /*

         * 由于点(.)在正则中有特定的含义,如果在程序中需要使用点本身

         * 就需要使用转义字符表示点

         */

        Stringregex = "\\.+";

 

        String[]strs = s.split(regex);

 

        for (inti = 0; i < strs.length; i++) {

            System.out.println(strs[i]);

        }

    }

 

    // 使用正则切割字符串

    public static void method() {

 

        // 需要被切割的字符串数据

        Strings = "abc qwe jkl   123   3432    324";

 

        // 书写正则规则

        Stringregex = " +";

 

        String[]strs = s.split(regex);

 

        for (inti = 0; i < strs.length; i++) {

            System.out.println(strs[i]);

        }

    }

3,正则的组

// 切割,要求按照不同的叠词进行切割

    public static void method3() {

 

        // 需要被切割的字符串数据

        Strings = "abc##qwe###jklllll1232222bcd####abcccc3440123324";

        /*

         * 使用不同的叠词切割,由于不知道具体使用的是哪个叠词

         * 字符串中的任何字符都有可能重复,这些字符都有可能作为切割的标准

         *

         * 我们不知道具体是哪个字符在重复,因此只能使用正则中的点(.)表示被切割的那个字符

         * 只要这个字符重复了,就使用它作为切割标准。

         *

         * 只要当前这个点匹配上了这个字符,就必须要求这个字符后面的位置还要是这个字符

         * 解决上述的这个问题:需要将已经匹配上的正则规则在当前这个位置的后面继续使用

         * 这时就需要将这个规则封装成正则中的组,然后在后面的位置上使用这个组

         *

         * 正则中的组的书写格式:

         * "(正则规则)后面就可以使用前面小括号中封装好的规则"

         * 如果需要在当前这个正则中引用前面已经存在的组,格式是:

         * \\组号

         * 正则中只要使用小括号,就代表将某个规则封装成一个组,每个组都有自己默认的编号

         * 正则中的组的编号从1开始,只要出现一个组,编号就自动+1.

         *

         * 例如:"(.)\\1" 先使用这个正则规则去匹配某个字符串中的第一个位置,如果匹配上之后

         * 要求被匹配的第二个位置上的内容必须和第一个位置上的内容安全一致

         *

         * ((A)(B(C))) 共计有4个组:

         * 第一组:((A)(B(C))) 1

         *  第二组:(A)  2

         *  第三组:(B(C))  3

         *  第四组:(C)  4

         * 开发中尽量不要使用组或者是组的嵌套。

         *

         */

        Stringregex = "(.)\\1+";

 

        String[]strs = s.split(regex);

 

        for (inti = 0; i < strs.length; i++) {

            System.out.println(strs[i]);

        }

    }

4,替换功能


/*

 * 使用正则替换字符串中的数据

 */

public class ReplaceDemo {

    public static void main(String[] args) {

        method4();

    }

    //正则替换练习

    public static void method4() {

        //将下面的字符串中的数据替换成我要学Java编程

        Strings = "我我我我.......要要要要要要....学学学学学.......Java........程程程程程程";

        //先把字符串中的所有点干掉

        Strings2 = s.replaceAll("\\.+", "");

        System.out.println(s2);

        //将不同的叠词替换成一个

        String s3 = s2.replaceAll("(.)\\1+", "$1");

        System.out.println(s3);

       

    }

    //使用正则的替换功能将手机号码中间四位替换成****

    public static void method3() {

       

        Stringtel = "13412345678";

        //书写正则规则

        Stringregex = "(1[34578][0-9])(\\d{4})(\\d{4})";

       

        Stringstring = tel.replaceAll(regex, "$1****$3");

       

        System.out.println(string);

    }

 

    // 将字符串中的多个不同的叠词替换中一个叠词

    public static void method2() {

 

        Strings = "ssjddklffffjsklddddjfkkkkklsdjflllllksd";

 

        /*

         *  书写正则规则

         * 

         *  如果在一个正则表达式中,已经存在了组,在本正则中使用存在的组

         *  直接使用\\组号的方式引用。

         *  如果不在本正则表达式中引用正则中的组,需要使用$组号

         */

        Stringregex = "(.)\\1+";

 

        Stringnew_str = s.replaceAll("(.)\\1+","$1");

        System.out.println(new_str);

 

    }

 

    // 将多个#替换成一个#

    public static void method() {

        // 需要被替换的字符串

        Strings = "sjk####lfj###sdk#######ljfk####ld##sj";

 

        // 书写正则规则

        Stringregex = "#+";

 

        Stringnew_str = s.replaceAll(regex, "#");

        System.out.println(new_str);

    }

}

获取功能

需求:从一个字符串中提取指定的内容

“sdjflkskj13234561234djfue1349876543rieje18800008888irtircnvhdslflsdjfl”

 

正则表达式它在Java中它属于字符串,但是这类字符串数据又具备了其他的功能。Java将正则表达式这类数据又重新封装一个类,使用这个类表示正则表达式这类事物(数据)。


在Java中Pattern这个类表示正则表达式这类事物。

Pattern类没有对外提供公开的构造方法,因此我们不能直接通过new关键字创建Pattern对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值