简单的正则表达式(限定符)

201 阅读3分钟

3.1 匹配单个字符

如果要匹配一个特定的字母字符或者数字,那么只需使用由相应的字符或者数字组成的模式即可。

L

QQ截图20230129093100.png

  • 匹配连续的字符序列

    使用正则表达式通常是匹配一个字符序列而不仅仅是一个单独的字符

    L中,使用正则表达式引擎的默认形式,即不会指出字符(或字符序列)出现的次数,这种情况下,引擎假使模式字符(或字符序列)恰好出现一次

    rr
    

    QQ截图20230129093834.png

    【工作原理】

    模式rr 告诉正则表达式引擎应匹配小写的字符r,

    如果第1次匹配成功,那么再尝试匹配下一个字符。如果第2个字符也是小写的 r,那么表示全部匹配成功。

    如果在匹配第1个字符时失败了,会测试下一个字符是不是小写的 r。如果不是小写的r,匹配失败。然后,重新根据正则表达式模式中的第1个r来开始下一轮匹配。

  • 元字符简介

    截至目前为止,见到的模式(L,rr)都是不变的直接量字符,含义就是匹配字符本身

    而元字符可以是一个单独的字符,或者是一对字符(前一个通常是反斜杠),并且具有不同于其直接量字符的含义

    • 匹配'ABC123'数字部分

      \d\d\d[0-9][0-9][0-9]

      QQ截图20230129100029.png \d/[0-9]:表示数字0~9,不表示反斜杠后跟一小写字母d。

      一个元字符通常会匹配一类字符

  • 匹配不同的字符序列

    常见的任务是查找直接指定的单个字符及一个字符序列

    DOR\d\d\d//DOR[0-9][0-9][0-9]

    QQ截图20230129103934.png

3.2 ?匹配可选字符

如果想要匹配单个直接量字符出现0次或者1次,即怎么才能匹配一个可选的字符,需要使用?表示前面的字符块是可选的表示问号之前的模式,可以是单个或多个(不同的)字符,可以是更加复杂的正则表达式结构。

  • colou?r

    QQ截图20230129110929.png

  • colou?r'?s?'?

  • QQ截图20230129112034.png

    上述模式的全部可选部分都可以存在命中

3.3 * + 其他限量操作符

  1. *:表示相关的模式出现0次或者多次(>=1)。一个或一组字符是可选的,但也可能会出现多次。 ABC[0-9]*

    QQ截图20230129114318.png

  2. +:如果只能确定一个或一组字符至少存在一次,但也不排除该(组)字符出现多次的可能性,这就需要+

    + 操作符:匹配一次或多次前面的块

    ABC[0-9]+

    QQ截图20230129142621.png

【总结】

限定符含义
匹配0或1次
*匹配 > = 0
+匹配 > =1

可以通过在正则表达式模式中简单地重复一个字符来表达要匹配的重复字符

3.4 大括号语法——限定匹配次数

使用一种大括号语法来精确地指定要匹配的次数

  1. { n } 语法

    ABC[0-9][0-9][0-9]
    //上下等价
    ABC[0-9]{3}
    

    使用大括号语法来指定最少和最多的次数

  2. { n,m } 语法

    使用大括号语法可以让开发者使用 三类限量操作符无法实现 的 限定匹配次数,见下例:

  3. { 0 , m } 语法

    指定最少匹配零次(由开始大括号后面的第一位数字指定)而最多匹配m次(由第二个数字指定,与指定最少次数的数字之间以逗号分隔,且位于结束的大括号前面)

    {0,1}: 与?含义相同

    {0,3}: 最少匹配零次,最多匹配三次

  4. { n,m }

    最小匹配次数说明符不一定是0,但不能超过最大出现次数说明符

  5. { n, }

    有时候需要匹配无限次,可以通过忽略大括号中的最大出现次数说明符来达到指定无限次的目的