这是一篇发布时间大于两年的文章,当时的一些内容或笔者曾经的思维可能已不再适用于现在,请谨慎判断文章内容的可靠性


0.开始

最近一段时间对正则表达式的需求比较大,于是去图书馆一口气借下了几本正则相关的书打算最近几天系统学习一下,本文记录正则表达式学习笔记

1.匹配单个字符

.匹配任意字符

2.匹配字符集合

[]匹配字符集合:[123]:1 或 2 或 3;[a-z]:一个小写字母

^非,表示不含有:[^a-z]:不含小写字母

3.匹配元字符

3.2 特殊字符

\转义字符,用来匹配特殊字符

3.2 空白字符

[\b]Backspace

\f换页符

\n换行符

\r回车符

\t制表符 Tab

\v垂直制表符

\s任意空白字符 等价[\f\n\r\t\v]

\S任意非空白字符

\r\n为 windows 所用的文本行结束标签

Unix 匹配空白行只使用\n\n,不需要\r

3.3 匹配数字

\d任意数组,等价[0-9]

\D任意非数字,等价[^0-9]

3.4 匹配字母和数字

\w任意字母数字或下划线 等价[a-zA-Z0-9_]

\W任意非字母数字下划线

3.5 匹配十六进制或八进制

可以通过某个特定字符的十六进制或者八进制数值来匹配

\x匹配十六进制字符,如\x0A对应于 ASCII 字符 10(换行符),因此效果等同于\n

\0匹配八进制字符,\011对应 ASCII 字符 9(制表符),效果等同于\t

4.重复匹配

+在一个给定字符或字符集合后加上+表示匹配多次重复

*+用法相同,不同点在于其可以匹配 0 个字符,而+至少需要匹配一个

  • 电子邮件地址匹配

\w+[\w.]*@[\w.]+\.\w+

@前最开头\w+必须是字母组合不可为点,[\w.]*往后可以是多个或 0 个点和字母的组合,随后匹配一个@不需要使用反斜杠转义,@之后必须是字母组合加点加字母组合表示域名,由于邮件地址可以有子域名因此可以匹配多个字母加点的组合使用[\w.]+\.\w+

4.1 允许匹配 0 个

?匹配零个或一个字符

  • 网址匹配

https?://[\w./]+

4.2 匹配重复次数

{6}在字符或字符集后使用以指定匹配重复的次数

  • 匹配十六位 RGB 色值

#[0-9a-fA-F]{6}

{2,6}设定匹配重复次数区间

{6,}至少重复 6 次

4.3 防止过度匹配

?匹配尽可能少的字符

*=>*?

+=>+?

{n,}=>{n,}?

5.位置匹配

5.1 单词边界

\b表示单词边界,开头或结尾

\bcat\b就是匹配一句话中的 cat 这个单词,而不会匹配某个包含 cat 三个字母长单词中的 cat

实际上\b匹配的是一个位置,这个位置位于一个能组成单词的字符等同于\w即字母数字和下划线与一个不能组成单词的字符\W之间的位置

5.2 字符串边界

^匹配字符串开头

$匹配字符串结尾

  • 匹配 xml 文档的开头标记

^\s*<\?xml.*\?>

  • 匹配 html 文档最后的</html>标记

</[Hh][Tt][Mm][Ll]>\s*$