正则表达式是什么?

80 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

正则表达式,通配符的增强版,匹配指定规则的字符串。词法分析器会使用正则表达式去匹配代码中的关键字;网站上注册表单会用到正则表达式去判断密码的复杂程度;在爬虫中同样可以用正则表达式提取我们需要的信息。

在线测试工具

限定符

?——前面字符0~1次

*——前面字符0~多次

+——前面字符1~多次

{n,m}——前面字符n次到m次

()——将多字符视为一个整体字符

“或”运算符

|——表示其前后二选一

()常必不可少(|运算优先级较低)

字符类

[……]——括号内有的字符

[a-z] 所有小写英文字符

[a-zA-Z] 所有英文字符

[a-zA-Z0-9] 所有英文字符和数字

[^……]——不是括号内字符的字符(与[……]反逻辑)

[^0-9]——代表所有的非数字字符(包括换行符)

1.jpg

元字符

已经定好的字符类,正则表达式中大部分元字符都是以反斜杠开头。

\d 数字字符(digit)

\w 单词字符(word)——英文、数字和下划线

\s 空白符(space)——也包括Tab和换行

\D 非数字字符

\W 非单词字符

\S 非空白字符

. 任意字符——但不包括换行符

^——行首是某字符

2.jpg

$——行尾是某字符

3.jpg

贪婪与懒惰匹配

*+{}匹配尽可能多的字符——贪婪

4.jpg

?——懒惰

5.jpg

实例1 RGB 颜色匹配

以#开头6位16进制数字:

#[a-fA-F0-9]{6}\b

  1. #——以“#”开头
  2. [……]——16进制数字可用字符
  3. {6}——前面这种情况连续出现6次
  4. \b——表示这里是字符边界

6.jpg

实例2 IPv4 地址匹配

四段数字,“.”连接

\d+.\d+.\d+.\d+

  1. \d+——任何长度大于等于1的数字
  2. .——“.”的字面量,\转义

7.2.jpg

IP地址每一位0~255

\b((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b

  1. 25[0-5]|——如果前面是25,后面数字只能取0-5
  2. 25[0-5]|2[0-4]——如果前面数字是2,后面只能取2-4
  3. 25[0-5]|2[0-4]\d|[01]\d\d——如果前面是0或1,后面可以取00-99
  4. 25[0-5]|2[0-4]\d|[01]?\d\d**?**——IP地址可以是一位数或两位数
  5. (25[0-5]|2[0-4]\d|[01]?\d\d?).——数字后的句点字面符
  6. (25[0-5]|2[0-4]\d|[01]?\d\d?).){3}——重复匹配三次(包括句点)
  7. ((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)——不包含句点的最后一段
  8. \b((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b——首尾字符边界

8.jpg