正则表达式| 青训营笔记

34 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天。

正则表达式在线测试工具:regex101.com/

1. 限定符

  • a*a 出现 0 次或多次
  • a+a 出现 1 次或多次
  • a?a 出现 0 次或 1 次
  • a{6}a 出现 6 次
  • a{2,6}a 出现 2 到 6 次 (2,3,4,5,6)
  • a{2,}a 出现 2 次及以上
  • (ab)*ab 出现 0 次或多次

2. 或运算符

  • (a|b):匹配 a 或者 b
  • ((ab)|(cd)):匹配 ab 或者 cd

3. 字符集合

  • [abc]:匹配 a 或者 b 或者 c(集合 abc 中的任意一个)
  • [a-z]:匹配 a 到 z 的字符集合
  • [^0-9]:匹配不是集合 0 到 9的
  • [a-fA-F0-9]:匹配 a到f A到F 0到9 的集合(十六进制的数字)

4. 元字符

  • \d:匹配数字字符
  • \D:匹配非数字字符
  • \w:匹配单词字符(英文大小写字母、数字、下划线)
  • \W:匹配非单词字符
  • \s:匹配空白字符(空格、换行、回车)
  • \S:匹配非空白字符
  • .:匹配除换行符以外的任意字符
  • \b:标注字符边界
  • ^:匹配行首
  • $:匹配行尾

正则表达式模式是贪婪模式,尽可能多的匹配字符。加上 ? 使它变为懒惰模式。

  • <.+> 匹配:<span><b>hello,regular</b></span>
  • <.+?> 匹配:<span><b></b></span>

5. 实例

  1. 快速选择 git meager
=======(.|\r|\n)*?>>>>>>> ef18e3b4337f758c1cde2fee14d0251238b399a1
  • (.|\r|\n):匹配所有字符和换行符
  • (.|\r|\n)*?:懒惰模式 可以匹配如下文本:
=======

class A {

}

class B {

}

>>>>>>> ef18e3b4337f758c1cde2fee14d0251238b399a1
  1. 十六进制 RGB 颜色值匹配
#[a-fA-F0-9]{6}\b
#00
#ffffff
#fafafa
#00hh00
#000000
#ffffffff
  1. IP 地址匹配
\b(((25[0-5])|(2[0-4]\d)|([01]?\d\d?))\.){3}((25[0-5])|(2[0-4]\d)|([01]?\d\d?))\b

说明

  • (25[0-5])|(2[0-4]\d)|([01]?\d\d?)
    • (25[0-5]):匹配 250 到 255
    • (2[0-4]\d):匹配 200 到 249
    • ([01]?\d\d?):匹配
      • [01]\d\d:匹配 000 到 199
      • \d\d:匹配 00 到 99
      • ~~[01]\d:匹配 00 到 19~~
      • \d:匹配 0 到 9
123
255.255.255.0
192.168.0.1
0.0.0.0
256.1.1.1
This is not IP address.
123.123.0