shell 第五篇

87 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

三、正则表达式

  1. 以S开头的字符串

    1. ^: 可以限定一个字符开头
    2. 目标:ShelloShello world
      表达式:^Shello
      
  1. 以数字结尾的字符串

    1. $:可以限定结尾

    2. 表示数字方式:

      1. [0123456789]
      2. [0-9]
    3. 目标:helloworld9
      表达式:helloworld[0-9]$
      
  2. 匹配空字符串(没有任何字符)

    1. ^$
  3. 字符串只包含三个数字

    1. 三个数字:[0-9][0-9][0-9]
  4. 字符串只有3到5个字母

    1. 字母表示:

      1. [a-zA-Z], 中间不要加空格
      2. 三个到五个字母:[a-zA-Z]{3,5}
    2. 重复次数{m, n}:

      1. 匹配前面修饰字符的次数,最少m次,最多n次
  5. 匹配不是a-z的任意字符

    1. ^ 在[]内部的时候,表示取反(注意,不是限定开头)
    2. ^[^0-9] : 以非数字开头的字符
    3. 内反,外头
    4. [^a-z] <<<===
  6. 字符串有0到1个数字或者字母或者下划线

    1. 表示0-1的方法

      1. {0,1}
      2. ? : 表示0,1个
    2. [a-zA-Z0-9_]?

    3. 内容
      hello
      hello1
      hello*
      ​
      正则:
      hello[a-zA-Z0-9_]?
      ​
      匹配结果:
      hello
      hello1
      hello
      
  7. 字符串有1个或多个空白符号(\t\n\r等)

    1. \s ==》 代表空格
    2. +:一个或多个
    3. 内容:hello      world
      ​
      正则:hello\s+world
      ​
      结果:hello      world
      
  8. 字符串有0个或者若干个任意字符(除了\n)

    1. .: 点,代表任意字符,除了\n
    2. *:星号,重复前一个字符0-n次
    3. 匹配任意字符,任意次数:通常做法,是: .* ==> 相当于通配符里面的 *
    4. 内容:hello     asdfaasdfasdfadfasdfasdf asdfasdfasdf   world
      正则:hello.*world
      结果:hello     asdfaasdfasdfadfasdfasdf asdfasdfasdf   world
      
    5. .{,} ==> 与 .*效果相同
  9. 小结:

    1. ? ===> 重复前面一个字符0-1
      • ===> 重复前面一个字符1-n
      • ===> 重复前面一个字符0-n
    2. . ===> 表示任意字符
    3. ^ ===> 限定以某个字符开头
    4. [^a-z] ===> 在方括号内,表示取反(非a-z的任意字符)
    5. $ ===> 限定以某个字符结尾
    6. 数字 ====》 [0123456789] 或[0-9]
    7. 字母 ===> [abcd] [a-zA-Z]
  10. 匹配0或任意多组ABC,比如ABC,ABCABCABC

    1. 使用()进行分组,组成新的匹配单元
    2. (ABC)*
  11. 字符串要么是ABC,要么是123

    1. (ABC|123)
    2. 内容:
      ABC
      ABCABCABCD 
      123456
      hellowlrd
      ​
      ​
      正则:(ABC|123)
      
  12. 字符串只有一个点号

    1. ^.$
  13. 匹配十进制3位整数 :

    1. 0~999 , 5, 10 , 200, 999

    2. 分段匹配:

      1. 一位数:

        1. [0-9]
      2. 二位数:

        1. [1-9][0-9]
      3. 三位数:

        1. [1-9][0-9]{2}
      4. 整合:

        1. ^ ([0-9]|[1-9][0-9]{1,2})$
  14. 匹配0-255的整数, ip地址

    1. 分段

      1. 一位:[0-9]

      2. 二位:[1-9][0-9]

      3. 三位:

        • 100- 199

          • 1[0-9]{2}
        • 200-249

          • 2[0-4][0-9]
        • 250-255

          • 25[0-5]
      4. 整合:

        • ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
        • 192.168.1.1
  15. 匹配端口号

    1. 0~65536
  16. email

    [\w!#$%&'*+/=?^_`{|}~-]+(?:.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?.)+[\w](?:[\w-]*[\w])?
    

三种正则表达式:

  1. 基础正则:(不使用) ==》 +?* 都当成普通字符来处理

  2. 扩展正则:(我们默认使用这个)==》 +?* 当成特殊字符

  3. Perl正则:

    1. +?*是特殊字符
    2. \d ==》 数字 [0-9]
    3. \w ==> 字符[a-zA-Z]
    4. 用法\d{3}\w 可以匹配:212c