zoukankan      html  css  js  c++  java
  • java基础38 正则表达式

    1、常用的正则表达式

     预定义字符类:
    任何字符(与行结束符可能匹配也可能不匹配)
    d  数字:[0-9]
    D  非数字: [^0-9]
    空白字符:[ x0Bf ]
    S  非空白字符:[^s]
    单词字符:[a-zA-Z_0-9]
    W  非单词字符:[^w]

    数量词:
    X?  X,一次或一次也没有
    X*  X,零次或多次
    X+  X,一次或多次
    X{n}  X,恰好 n 次
    X{n,}  X,至少 n 次
    X{n,m}  X,至少 n 次,但是不超过 m 次

    字符类 :(范围)
    [abc]  a、b 或 c(简单类)
    [^abc]  任何字符,除了 a、b 或 c(否定)
    [a-zA-Z]  a 到 z 或 A 到 Z,两头的字母包括在内(范围)
    [a-d[m-p]]  a 到 d 或 m 到 p:[a-dm-p](并集)
    [a-z&&[def]]  d、e 或 f(交集)
    [a-z&&[^bc]]  a 到 z,除了 b 和 c:[ad-z](减去)
    [a-z&&[^m-p]]  a 到 z,而非 m 到 p:[a-lq-z](减去)

     2、实例

      1 package com.dhb.pattern;
      2 
      3 /**
      4  * @author DSHORE / 2018-5-31
      5  *
      6  */
      7 public class Demo1 {//注意:   表示:转义字符,所以下面有一个的,都要再加上一个。比如:要想输出d的效果,就必须要以\d的形式输出才行
      8     public static void main(String[] args) {//matches():匹配   判断前面的字符,是否匹配后面的字符
      9         //预定义字符类
     10         System.out.println("a".matches("."));//返回值:true  说明:.是匹配a的,即.=a
     11         System.out.println("aa".matches("."));//返回值:false  说明:.表示 一个字符,而aa是两个字符
     12         System.out.println(" ".matches("."));//返回值:true  说明:空格也是匹配a的,即空格=a
     13         System.out.println("1".matches("."));//返回值:true
     14         
     15         System.out.println("0".matches("\d"));//返回值:true  说明:d表示 数字:[0-9]
     16         System.out.println("10".matches("\d"));//返回值:false  说明:d表示 一个字符,而10是两个字符
     17         System.out.println("9".matches("\d"));//返回值:true
     18         System.out.println("a".matches("\d"));//返回值:false  说明:a不是数字字符
     19         
     20         System.out.println("a".matches("\D"));//返回值:true   说明:D表示 非数字: [^0-9]
     21         System.out.println("aa".matches("\D"));//返回值:false  说明:D表示 一个字符,而aa是两个字符
     22         System.out.println("0".matches("\D"));//返回值:false
     23         System.out.println("2".matches("\D"));//返回值:false
     24         
     25         System.out.println("	".matches("\s"));//返回值:true  说明:s表示 空白字符:[ 	
    x0Bf
    ]
     26         System.out.println(" ".matches("\s"));//返回值:true
     27         System.out.println("a".matches("\s"));//返回值:false
     28         System.out.println("1".matches("\s"));//返回值:false
     29         
     30         System.out.println("a".matches("\S"));//返回值:true  说明:S表示 非空白字符:[^s]
     31         System.out.println("aa".matches("\S"));//返回值:false  说明:S表示 一个字符,而aa是两个字符
     32         System.out.println(" ".matches("\S"));//返回值:false  说明:" "是空白字符
     33         
     34         System.out.println("@".matches("\w"));//返回值:false   说明:w表示 单词字符:[a-zA-Z_0-9]
     35         System.out.println("1".matches("\w"));//返回值:true
     36         System.out.println("10".matches("\w"));//返回值:false   说明:w表示 一个字符,而10是两个字符
     37         System.out.println("a".matches("\w"));//返回值:true
     38         System.out.println("aa".matches("\w"));//返回值:false   
     39         System.out.println("_".matches("\w"));//返回值:true
     40         
     41         System.out.println("_".matches("\W"));//返回值:false   说明:W表示 非单词字符:[^w]
     42         System.out.println("1".matches("\W"));//返回值:false
     43         System.out.println("a".matches("\W"));//返回值:false
     44         System.out.println("@".matches("\W"));//返回值:true  说明:特殊字符都是
     45         
     46         //数量词
     47         System.out.println("a".matches("."));//返回值:true  说明:X?表示:X为一次或一次也没有 
     48         System.out.println("aa".matches("."));//返回值:false
     49         System.out.println("aa".matches("a."));//返回值:true
     50         System.out.println("aaa".matches("a."));//返回值:false
     51         System.out.println("aaa".matches("a.."));//返回值:true
     52         System.out.println("aa".matches("a?"));//返回值:false
     53         
     54         System.out.println("a".matches("a*"));//返回值:true   说明:X*表示:X为零次或多次
     55         System.out.println("aa".matches("a*"));//返回值:true
     56         System.out.println("aaaa".matches("a*"));//返回值:true
     57         System.out.println("".matches("a*"));//返回值:true
     58         
     59         System.out.println("ccccc".matches("c+"));//返回值:true   说明:X+表示:X为一次或多次 
     60         System.out.println("c".matches("c+"));//返回值:true
     61         System.out.println("".matches("c+"));//返回值:false
     62         System.out.println(" ".matches("c+"));//返回值:false
     63         
     64         System.out.println("aa".matches("a{3}"));//返回值:false   说明:X{n}表示:X恰好是n次 
     65         System.out.println("aaa".matches("a{3}"));//返回值:true
     66         System.out.println("ccccc".matches("a{3}"));//返回值:false
     67         
     68         System.out.println("a".matches("a{2,}"));//返回值:false   说明:X{n,}表示:X至少为n次
     69         System.out.println("aa".matches("a{2,}"));//返回值:true
     70         System.out.println("cccccc".matches("c{2,}"));//返回值:true
     71         
     72         System.out.println("aa".matches("a{3,6}"));//返回值:false   说明:X{n,m}表示:X至少为n次,但是不超过m次
     73         System.out.println("aaa".matches("a{3,6}"));//返回值:true
     74         System.out.println("aaaaaa".matches("a{3,6}"));//返回值:true
     75         System.out.println("aaaaaaaaa".matches("a{3,6}"));//返回值:false
     76         
     77         //字符类  (范围)
     78         System.out.println("a".matches("[abc]"));//返回值:true   说明:前面的字符"?"要在[abc]中;  是a或b或c
     79         System.out.println("b".matches("[abc]"));//返回值:true
     80         System.out.println("c".matches("[abc]"));//返回值:true
     81         System.out.println("ab".matches("[abc]"));//返回值:false
     82         System.out.println("d".matches("[abc]"));//返回值:false
     83          结合上面的数量词
     84         System.out.println("abc".matches("[abc]{3}"));//返回值:true  说明:{3,}表示:正好出现三次
     85         System.out.println("abc".matches("[abc]{3,}"));//返回值:true  说明:{3,}表示:可以出现三次或三次以上
     86         System.out.println("abc".matches("[abc]+"));//返回值:true  说明:+表示:一次或多次 
     87         
     88         System.out.println("1".matches("[^abc]"));//返回值:true  说明:[^abc]表示:任何字符,除了 a、b或c;即:除了括号中指定的字符
     89         System.out.println("a".matches("[^abc]"));//返回值:false
     90         System.out.println("ab".matches("[^abc]"));//返回值:false
     91         System.out.println("abc".matches("[^abc]"));//返回值:false
     92         
     93         System.out.println("c".matches("[a-zA-Z]"));//返回值:true  说明:[a-zA-Z]表示:a到z或A到Z,两头的字母包括在内(范围)
     94         System.out.println("aC".matches("[a-zA-Z]"));//返回值:false
     95         System.out.println("aC".matches("[a-zA-Z]{2,}"));//返回值:true
     96         System.out.println("#aC51".matches("[a-zA-Z#5\d]{2,}"));//返回值:true
     97         System.out.println("#aC58".matches("[a-zA-Z#5\d]{2,}"));//返回值:true
     98         
     99         System.out.println("p".matches("[a-d[m-p]]"));//返回值:true  说明:[a-d[m-p]]表示: a到d或m到p:[a-dm-p](并集)
    100         System.out.println("c".matches("[a-d[m-p]]"));//返回值:true
    101         System.out.println("o".matches("[a-d[m-p]]"));//返回值:true
    102         System.out.println("k".matches("[a-d[m-p]]"));//返回值:false
    103         
    104         System.out.println("a".matches("[a-z&&[def]]"));//返回值:false  说明:[a-z&&[def]]表示:d、e或f(交集) 
    105         System.out.println("y".matches("[a-z&&[def]]"));//返回值:false
    106         System.out.println("d".matches("[a-z&&[def]]"));//返回值:true
    107         System.out.println("f".matches("[a-z&&[def]]"));//返回值:true
    108         
    109         System.out.println("b".matches("[a-z&&[^bc]]"));//返回值:false  说明:[a-z&&[^bc]]表示:a到z,除了b和c:[ad-z](减去)
    110         System.out.println("g".matches("[a-z&&[^bc]]"));//返回值:true
    111         System.out.println("w".matches("[a-z&&[^bc]]"));//返回值:true
    112         
    113         System.out.println("c".matches("[a-z&&[^m-p]]"));//返回值:true  说明:[a-z&&[^m-p]]表示:a到z,而非m到p:[a-lq-z](减去)
    114         System.out.println("n".matches("[a-z&&[^m-p]]"));//返回值:false
    115         System.out.println("p".matches("[a-z&&[^m-p]]"));//返回值:false
    116     }
    117 }

     3、正则表达式  附录:

    构造匹配
     
    字符
    x 字符 x
    \ 反斜线字符
    n 带有八进制值 0 的字符 n (0 <= n <= 7)
    nn 带有八进制值 0 的字符 nn (0 <= n <= 7)
    mnn 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
    xhh 带有十六进制值 0x 的字符 hh
    uhhhh 带有十六进制值 0x 的字符 hhhh
    制表符 ('u0009')
    新行(换行)符 ('u000A')
    回车符 ('u000D')
    f 换页符 ('u000C')
    a 报警 (bell) 符 ('u0007')
    e 转义符 ('u001B')
    cx 对应于 x 的控制符
     
    字符类
    [abc] abc(简单类)
    [^abc] 任何字符,除了 abc(否定)
    [a-zA-Z] azAZ,两头的字母包括在内(范围)
    [a-d[m-p]] admp[a-dm-p](并集)
    [a-z&&[def]] def(交集)
    [a-z&&[^bc]] az,除了 bc[ad-z](减去)
    [a-z&&[^m-p]] az,而非 mp[a-lq-z](减去)
     
    预定义字符类
    . 任何字符(与行结束符可能匹配也可能不匹配)
    d 数字:[0-9]
    D 非数字: [^0-9]
    s 空白字符:[ x0Bf ]
    S 非空白字符:[^s]
    w 单词字符:[a-zA-Z_0-9]
    W 非单词字符:[^w]
     
    POSIX 字符类(仅 US-ASCII)
    p{Lower} 小写字母字符:[a-z]
    p{Upper} 大写字母字符:[A-Z]
    p{ASCII} 所有 ASCII:[x00-x7F]
    p{Alpha} 字母字符:[p{Lower}p{Upper}]
    p{Digit} 十进制数字:[0-9]
    p{Alnum} 字母数字字符:[p{Alpha}p{Digit}]
    p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
    p{Graph} 可见字符:[p{Alnum}p{Punct}]
    p{Print} 可打印字符:[p{Graph}x20]
    p{Blank} 空格或制表符:[ ]
    p{Cntrl} 控制字符:[x00-x1Fx7F]
    p{XDigit} 十六进制数字:[0-9a-fA-F]
    p{Space} 空白字符:[ x0Bf ]
     
    java.lang.Character 类(简单的 java 字符类型
    p{javaLowerCase} 等效于 java.lang.Character.isLowerCase()
    p{javaUpperCase} 等效于 java.lang.Character.isUpperCase()
    p{javaWhitespace} 等效于 java.lang.Character.isWhitespace()
    p{javaMirrored} 等效于 java.lang.Character.isMirrored()
     
    Unicode 块和类别的类
    p{InGreek} Greek 块(简单)中的字符
    p{Lu} 大写字母(简单类别
    p{Sc} 货币符号
    P{InGreek} 所有字符,Greek 块中的除外(否定)
    [p{L}&&[^p{Lu}]]  所有字母,大写字母除外(减去)
     
    边界匹配器
    ^ 行的开头
    $ 行的结尾
     单词边界
    B 非单词边界
    A 输入的开头
    G 上一个匹配的结尾
     输入的结尾,仅用于最后的结束符(如果有的话)
    z 输入的结尾
     
    Greedy 数量词
    X? X,一次或一次也没有
    X* X,零次或多次
    X+ X,一次或多次
    X{n} X,恰好 n
    X{n,} X,至少 n
    X{n,m} X,至少 n 次,但是不超过 m
     
    Reluctant 数量词
    X?? X,一次或一次也没有
    X*? X,零次或多次
    X+? X,一次或多次
    X{n}? X,恰好 n
    X{n,}? X,至少 n
    X{n,m}? X,至少 n 次,但是不超过 m
     
    Possessive 数量词
    X?+ X,一次或一次也没有
    X*+ X,零次或多次
    X++ X,一次或多次
    X{n}+ X,恰好 n
    X{n,}+ X,至少 n
    X{n,m}+ X,至少 n 次,但是不超过 m
     
    Logical 运算符
    XY X 后跟 Y
    X|Y XY
    (X) X,作为捕获组
     
    Back 引用
    n 任何匹配的 nth 捕获组
     
    引用
    Nothing,但是引用以下字符
    Q Nothing,但是引用所有字符,直到 E
    E Nothing,但是结束从 Q 开始的引用
     
    特殊构造(非捕获)
    (?:X) X,作为非捕获组
    (?idmsux-idmsux)  Nothing,但是将匹配标志i d m s u x on - off
    (?idmsux-idmsux:X)   X,作为带有给定标志 i d m s u x on - off
    (?=X) X,通过零宽度的正 lookahead
    (?!X) X,通过零宽度的负 lookahead
    (?<=X) X,通过零宽度的正 lookbehind
    (?<!X) X,通过零宽度的负 lookbehind
    (?>X) X,作为独立的非捕获组

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/9132070.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    luogu P1630 求和(枚举暴力)
    luogu P3414 SAC#1
    luogu P1869 愚蠢的组合数(质因数+瞎搞)
    luogu P1586 四方定理(背包)
    luogu P3795 钟氏映射(递推)
    2017.8.15 [Haoi2016]字符合并 区间dp+状压dp
    [NOI2002] 荒岛野人 扩展欧几里得算法
    [Noi2002]Savage 扩展欧几里得
    bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
    bzoj 3505: [Cqoi2014]数三角形
  • 原文地址:https://www.cnblogs.com/dshore123/p/9132070.html
Copyright © 2011-2022 走看看