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
    读懂正则表达式
    常用正则表达式大全
    简单学习正则表达式

  • 相关阅读:
    【leetcode】Binary Search Tree Iterator
    【leetcode】Palindrome Partitioning II
    【leetcode】Best Time to Buy and Sell Stock III
    【leetcode】Best Time to Buy and Sell Stock II
    【leetcode】Longest Consecutive Sequence
    【leetcode】Factorial Trailing Zeroes
    【leetcode】Simplify Path
    【leetcode】Generate Parentheses
    【leetcode】Combination Sum II
    【leetcode】Combination Sum
  • 原文地址:https://www.cnblogs.com/expiator/p/12250598.html
Copyright © 2011-2022 走看看