正则表达式学习笔记
什么是正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串
通配符: ?
匹配 0 个或 1 个字符 *
匹配零个或多个字符
^
匹配输入字符串的开始位置 [0-9 ]
匹配一个数字
+
前面的字符出现 1 次或多次 abc$
匹配 abc ,并以 abc 结尾
语法学习
普通字符
- [aeiou] :匹配字符串 “google runoob taobao” 中所有的 e o u a 字母
- [^aeiou] : 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字母。
- [A-Z] :匹配所有大写的字母
- . 匹配除换行符(\n、\r)之外的任何单个字符,相等于[^\n\r]。
- [\s\S]: 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
/w
匹配字母 数字 下划线 等价于[A-Za-z0-9]
特殊字符
?
, .
, *
, /
, +
等等
限定符
*
前面子表达式出现零次或多次
+
匹配前面的子表达式一次或多次
?
匹配前面的子表达式零次或一次
{n}
: 匹配 n 次 例如,o{2} 不能匹配 “Bob” 中的 o,但是能匹配 “food” 中的两个 o。
{n,}
:至少匹配 n 次 例如,o{2,} 不能匹配 “Bob” 中的 o,但能匹配 “foooood” 中的所有 o。
{n,m}
:匹配 n~m 次
定位符
^
: 匹配字符串输入开始的位置
$
: 匹配字符串输入结束的位置
\b
匹配一个单词边界
匹配单词边界稍有不同,但向正则表达式添加了很重要的能力。单词边界是单词和空格之间的位置。非单词边界是任何其他位置。下面的表达式匹配单词 Chapter 的开头三个字符,因为这三个字符出现在单词边界后面: Chapter
/\bCha/
: 匹配在单词开头的 Cha 字符 /ter\b/
:匹配在单词结尾的 ter 字符
\B
非单词边检匹配
选择
用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。
() 表示捕获分组,**()** 会把每个分组里的匹配的值保存起来,
修饰符
标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。
标记不写在正则表达式里,标记位于表达式之外 如上面的/g
/i : 不区分大小写
g: 查找所有的匹配项
m : 多行匹配
s : 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。
元字符
建议直接查阅:(正则表达式 – 元字符 | 菜鸟教程 (runoob.com))
列举一些重要的:
\cx
匹配有 x 指明的控制字符,例如, \cM 匹配一个 Control-M 或回车符。
\d
等价于 [0-9]。
\D
等价于 [^0-9]
\w
匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’
\W
匹配字母、数字、下划线。等价于’[^A-Za-z0-9_]’
运算符的优先级
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。
优先级高到低 :
- \ :转义符
- (),(?:),(?=),[] :圆括号的方括号
- *, +, ?, {n}, {n,}, {n,m} 限定符
- ^, $, \任何元字符、任何字符
- | 替换,“或”操作
实战演练:
用尽可能精确的正则表达式描述南京邮电大学 19 至 22 级的所有本科生的学号
/^(B|Q|P)(19|20|21)(0|1)\d(0|1)\d([0-5][1-9]|[1-5]0)/g