Java入门第85课——正则表达式

1.1 基本正则表达式

1.1.1 正则表达式简介

    · 实际开发中,经常需要对字符串数据进行一些复杂的匹配、查找、替换等操作。通过"正则表达式",可以方便的实现字符串的复杂操作。

    · 正则表达式是一串特定字符,组成一个"规则字符串",这个"规则字符串"是描述文本规则的工具。正则表达式就是记录文本规则的代码。

    · 例如:

        正则表达式:"[a-z]"表示a到z的任意一个字符

        正则表达式:"[a-z]"表示由1个或多个a-z字符组成的字符串。

正则表达式简介(续1)

                                字符集合

正则表达式 说明
[abc] a、b、c中任意一个字符
[^abc] 除了a、b、c的任意字符
[a-z] a、b、c、......、z中的任意一个字符
[a-zA-Z0~9] a~z、A~Z、0~9中任意一个字符
[a-z&&[^bc]] a~z中除了b和c以外的任意一个字符,其中&&表示"与"的关系

正则表达式简介(续2)

                                预定义字符集

正则表达式 说明
. 任意一个字符
\d 任意一个数字字符,相当于[0-9]
\w 单词字符,相当于[a-zA-Z0-9_]
\s 空白字符,相当于[\t\n\x0B\f\r]
\D 非数字字符
\W 非单词字符
\S 非空白字符

正则表达式简介(续3)

                                数量词

正则表达式 说明
X? 表示0个或1个X
X* 表示0个或任意多个X
X+ 表示1个到任意多个X(大于等于1个X)
X{n} 表示n个X
X{n, } 表示n个到任意多个X(大于等于n个X)
X{n,m} 表示n个到m个X

正则表达式简介(续4)

    · 检索邮政编码:

        规则为6位数字

        第一种匹配规则 [0-9][0-9][0-9][0-9][0-9]

        简化第一种规则 \d\d\d\d\d

        简化第二种规则 \d{6}

image.png

1.1.2 分组"()"

    · 分组:()圆括号表示分组,可以将一系列正则表达式看做一个整体,分组时可以使用"|"表示"或"关系,例如:匹配手机号码前面的区号:

    (\+86|0086)?\s?\d{11}

    上述例子中,圆括号表示这里需要出现" +86"或者"0086"

分组"()"(续1)

    · 检索手机号码:+8613838389438

    +86 可有可无

    +86与后面的号码直接空格可以没有或者有多个

    电话号码为11位数字

image.png

1.1.3 "^"和"$"

 · 边界匹配

        ^代表字符串开始

        $代表字符串结束

    · 例如:匹配用户名规则-从头到尾连续8~10个单词字符

            \w{8,10}

            ^\w{8,10}$

    · 如果使用第一种写法,则"abcd1234_abcd"是可以验证通过的;

    · 使用第二种写法由于有从头到尾整体的限定,则验证不能通过。

1.2 String正则API

1.2.1 matches方法

    · matches(正则表达式)方法:将一个字符串与正则表达式进行匹配

    · 如果匹配成功就返回true,否则返回false

    /** 测试email是否合法 */
    public void email(){
        String emailRegEx="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$";
        String email="[email protected]";
        System.out.println(email.matches(emailRegEx));
    }

1.2.2 split方法

    · String的split方法可以将字符串按照特定的分隔符拆分成字符串数组

String[] split(String regex) 参数regex为正则表达式,以regex所表示的字符串为分隔符,将字符串拆分成字符串数组。

    数据:"3,itkzhan, 3,  [email protected],33"

    拆分为:["3"," itkzhan","  3"," [email protected],"," 33"]

    拆分方式:str.split(",\\s*");

    解释:以逗号开头,>=0个的空格组合为分割

split方法(续1)

    /** 使用split方法拆分字符串 */
    public void testSplit(){
        //按空格拆分
        String str="java cpp php c# objective-c";
        String[] strArr=str.split("\\s");
        System.out.println(Arrays.toString(strArr));
        
        //按+、-、=符号拆分
        String line="100+200-150=150";
        strArr=line.split("[\\+\\-=]";
        System.out.println(Arrays.toString(strArr));
    }

1.2.3 replaceAll方法

    · String提供了用于字符串替换的方法:

String replaceAll(String regex,String replacement) 将字符串匹配正则表达式regex的字符串替换成replacement。

replaceAll方法(续1)

    /** 使用replaceAll方法实现字符串替换 */
    @Test
    public void testReplaceAll(){
        //将str中的所有数字替换为"数字"二字
        String str="abc123bcd45ef6f7890";
        str=str.replaceAll("\\d+","数字");
        System.out.println(str);
    }

关注公众号,获取学习视频

发布了139 篇原创文章 · 获赞 82 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/houjunkang363/article/details/102553842
今日推荐