标志/模式
写在正则表达式的外部,通常为 /pattern/flag 形式。
g:全局匹配(查找所有匹配项,而不是在第一个匹配后停止)m:多行模式,使^和$匹配每一行的首尾i:不区分大小写匹配
字面匹配和通配符
普通字符:直接输入字符进行精确匹配
.:匹配除换行符外的任意单个字符(通配符)
自定义字符集:
[abc]:匹配括号内的任意一个字符和数字[^abc]:匹配不在括号内的任意一个字符和数字[a-z],[A-Z],[1-9]:匹配指定范围内的字符和数字
预定义简写:
\d:任意数字,等价于[0-9]\D:任意非数字\w:字母、数字或下划线,等价于[A-Za-z0-9_]\W:非字母、数字或下划线\s:空白字符(空格、制表符、换行等)\S:非空白字符
量词(重复次数):
*:0 次或多次(任意次数)+:1 次或多次?:0 次或 1 次(可选){n}:恰好出现 n 次{n,}:至少出现 n 次{n,m}:出现 n 到 m 次
贪婪与懒惰
默认为贪婪匹配:尽可能多地匹配
在量词后加 ? 变为懒惰匹配:尽可能少地匹配
*?、+?、??、{n,m}?
分组与捕获
(expr):捕获分组,将内部表达式作为一个整体,并捕获匹配文本\n:反向引用,引用第 n 个捕获分组匹配的内容(如\1)(?:expr):非捕获分组,只分组但不捕获,无法反向引用
分支
|:或运算,匹配左边或右边的表达式 例如cat|dog匹配 “cat” 或 “dog”- 通常在分组内使用:
(cat|dog)
位置匹配
锚点:
^:匹配字符串的开头$:匹配字符串的结尾- 多行模式(
m标志)下,^和$还匹配每行的开头和结尾
零宽断言(Lookaround):
- 正向前瞻:
expr(?=word)— 匹配后面跟着word的expr - 负向前瞻:
expr(?!word)— 匹配后面不是word的expr - 正向后顾:
(?<=word)expr— 匹配前面有word的expr - 负向后顾:
(?<!word)expr— 匹配前面不是word的expr