开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
正则表达式,通配符的增强版,匹配指定规则的字符串。词法分析器会使用正则表达式去匹配代码中的关键字;网站上注册表单会用到正则表达式去判断密码的复杂程度;在爬虫中同样可以用正则表达式提取我们需要的信息。
限定符
?——前面字符0~1次
*——前面字符0~多次
+——前面字符1~多次
{n,m}——前面字符n次到m次
()——将多字符视为一个整体字符
“或”运算符
|——表示其前后二选一
()常必不可少(|运算优先级较低)
字符类
[……]——括号内有的字符
[a-z] 所有小写英文字符
[a-zA-Z] 所有英文字符
[a-zA-Z0-9] 所有英文字符和数字
[^……]——不是括号内字符的字符(与[……]反逻辑)
[^0-9]——代表所有的非数字字符(包括换行符)
元字符
已经定好的字符类,正则表达式中大部分元字符都是以反斜杠开头。
\d 数字字符(digit)
\w 单词字符(word)——英文、数字和下划线
\s 空白符(space)——也包括Tab和换行
\D 非数字字符
\W 非单词字符
\S 非空白字符
. 任意字符——但不包括换行符
^——行首是某字符
$——行尾是某字符
贪婪与懒惰匹配
*+{}匹配尽可能多的字符——贪婪
?——懒惰
实例1 RGB 颜色匹配
以#开头6位16进制数字:
#[a-fA-F0-9]{6}\b
- #——以“#”开头
- [……]——16进制数字可用字符
- {6}——前面这种情况连续出现6次
- \b——表示这里是字符边界
实例2 IPv4 地址匹配
四段数字,“.”连接
\d+.\d+.\d+.\d+
- \d+——任何长度大于等于1的数字
- .——“.”的字面量,\转义
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
- 25[0-5]|——如果前面是25,后面数字只能取0-5
- 25[0-5]|2[0-4]——如果前面数字是2,后面只能取2-4
- 25[0-5]|2[0-4]\d|[01]\d\d——如果前面是0或1,后面可以取00-99
- 25[0-5]|2[0-4]\d|[01]?\d\d**?**——IP地址可以是一位数或两位数
- (25[0-5]|2[0-4]\d|[01]?\d\d?).——数字后的句点字面符
- (25[0-5]|2[0-4]\d|[01]?\d\d?).){3}——重复匹配三次(包括句点)
- ((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?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b——首尾字符边界