zoukankan      html  css  js  c++  java
  • java中正则表达式的运用及示例

    限定符(量词):

    *表示零次或多次,+表示至少一次,?表示最多一次。{n}表示n次,{n,}表示至少n次。

    中括号表达式:

    []表示或. 如[afg]表示一个为a或者f或者g的字母。

    中括号内的-表示范围。[0-9]表示数字0到9中的一个,[0-9]+表示至少一个数字。

    [A-Za-z]表示一个任意字母。[A-Za-z]+表示任意多个字母。

    中括号内的^表示非。[^xyz]表示任意不包含xyz的字符。比如123,abc之类的。

    中括号表达式的匹配示例如下:

    String str="abdf1459";
    //匹配4个小写字母,接着是4个数字
    String regex="[a-z]{4}[0-9]{4}";
    if (str.matches(regex)) {
        System.out.println(true);
    }
    

    此处的str.matches(regex)相当于:

    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(str);
    if(m.matches()){
        //...
    }
    

    中括号表达式的替换示例如下:

    String test="123xyz456abc";
    //将xyz和abcd这些字母,都替换成0
    //String result = test.replaceAll("[x-za-d]", "0");
    //将所有的非数字,都替换成0
    String result = test.replaceAll("[^0-9]", "0");
    System.out.println(result);
    

    小括号

    (xyz) 字符组,按照确切的顺序匹配字符xyz。

    元字符:

    • .

    .可以匹配除换行符之外的任何单字符。比如.*表示任意个非换行符 的字符。

    String str="abcdddabc";
    //  .*c+.*则表示以任意非换行符
    开始,中间包含至少一个c字符,并且以任意非
    字符结束。
    String regex=".*c+.*";
    if (str.matches(regex)){
        System.out.println(true);
    }
    
    • |

    | 表示或。

    比如 x|y ,可以匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

    • ^和$

    ^匹配字符串的开始位置。而$匹配字符串的结尾位置。

    ^cat : 验证该行以c开头紧接着是a,然后是t。

    cat$ : 验证该行以t结尾倒数第二个字符为a倒数第三个字符为c。

    ^cat$ : 以c开头接着是a->t然后是行结束:只有cat三个字母的数据行。

    匹配的示例,如下所示:

    String str="catdog";
    //regex只能匹配cat
    String regex="^cat$";
    //regex2可以匹配cat开头的字符串
    //.*表示任意个非换行符
    的字符
    String regex2="^cat.*";
    //regex3可以匹配dog结尾的字符串
    String regex3=".*dog$";
    boolean isMatch1=str.matches(regex);
    boolean isMatch2=str.matches(regex2);
    boolean isMatch3=str.matches(regex3);
    System.out.println(isMatch1+","+isMatch2+","+isMatch3);
    
    

    替换的示例,如下:

    public static void replaceEnd() {
        String test = "123.456.789....";
        //替换掉末尾的点号
        //[.]表示匹配符号点. 而+号表示至少一个,$表示末尾位置。如果去掉了$,那么所有的点号都会被替换掉。
        String result = test.replaceAll("[.]+$", "");
        //结果为123.456.789
        System.out.println(result);
    }
    
    • d
      由于元字符一般会放在字符串中,所以需要转义,也就是会变成 \ ,而d在字符串中会变成\d。

    d表示一个整数,d{4}表示4个整数,d+表示任意个整数。D+表示任意个非整数

    d{4}-d{2}-d{2}表示年月日,比如2016-05-05 。

    匹配示例如下:

    String str="2016-05-05";
    String regex="\d{4}-\d{2}-\d{2}"
    if (str.matches(regex)){
        System.out.println(true);
    }
    

    替换示例如下:

    String test="123abc45def";
    //替换掉所有数字
    String result=test.replaceAll("\d","");
    //结果为替换后的结果为 "abcdef"
    System.out.println(result);
    
    
    • s

    s表示一个空白字符(如空格、制表符、换页符等等),s+表示任意多的空白字符。

    String regex="\s"
    
    • S

    S表示任何一个非空白字符。S+表示任意多的非空白字符。

    String regex="\S"
    
    • p

    p{Upper}{2}表示2个大写字母。p{Lower}{3}表示3个小写字母。

    String regex="\p{Upper}{2}\p{Lower}{3}\d{4}"
    
    • w
      w 匹配字母或数字或下划线或汉字
    • W
      W 不匹配字母或数字或下划线或汉字

    匹配/替换特殊字符:

    在正则表达式中,想要匹配+[.?^{|这些特殊字符,需要在前面加上一个 。

    比如通过 . 去匹配.号,用\\去匹配。

    当然,也可以直接放到中括号里面,比如[.]就相当于"\."

    简单的替换特殊字符,如下:

        public static void replaceStr() {
            String test="123\456.789";
            String result = test.replaceAll("\\", "").replaceAll("\.", "");
            //结果为123456789
            System.out.println(result);
        }
    

    正则表达式中包含特殊字符的示例,如下:

        public static void replaceStr() {
            String test="123$456\$789$123";
            //替换所有的$,但是不替换$
            //"[^\\]\$",中括号内的^表示非,而\\表示特殊字符,[$]表示符号$
            System.out.println(test.replaceAll("[^\\][$]",""));
            //结果为 12456$78123
        }
    

    前瞻,后顾,负前瞻,负后顾

    A(?=B) 前瞻(Look ahead positive):

    匹配的是A,限制条件是A的后面是B,即AB。
    (?<=B)A 后顾(Look behind positive ):

    匹配表达式A,限制条件A的前面是B,即BA
    A(?!B) 负前瞻(Look ahead negative):

    顾名思义,该正则匹配A,限制条件是A后面不是B
    (?<!B)A 负后顾(Look behind negative ) :
    匹配表达式A,限制条件是A的前面不是B

    常用正则表达式

    • 正数或者小数,第一位不为零。
    [1-9]+[0-9]*([.][0-9]+)?
    

    参考资料:

    https://www.runoob.com/regexp/regexp-syntax.html
    读懂正则表达式
    常用正则表达式大全
    简单学习正则表达式

  • 相关阅读:
    channels的使用
    paramiko模块(远程操作服务器)
    GIT版本管理工具教程
    Python中的魔术方法详解(双下方法)
    Django中Q查询及Q()对象
    Python3操作Excel
    漏洞复现环境集锦-Vulhub
    CVE-2019-0193 远程命令执行-漏洞复现
    Weblogic-SSRF 漏洞复现
    CVE-2020-0796 永恒之蓝?
  • 原文地址:https://www.cnblogs.com/expiator/p/12250598.html
Copyright © 2011-2022 走看看