正则表达式与通配符
正则表达式
正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,通常被包裹在 / 与 / 之间
正则表达式有诸多不同的实现,这篇笔记参考了MDN 正则表达式
匹配单个字符
.匹配除\n\r之外的一个字符- 范围匹配
[xyz][a-z]匹配包含在方括号中的一个字符[^xyz][^a-z]匹配不包含在方括号中的一个字符- x
|y 匹配 x 或 y,注意:此处的 x、y 可以是字符串
\d匹配一个十进制数字\D匹配非\d\s匹配一个空白字符\S匹配非\s\w等价于[A-Za-z0-9_]\W匹配非\w
- 字符转义
\n匹配换行符\r匹配回车符\t匹配制表符\unnnn 匹配 Unicode 字符- ……
匹配特殊位置
^匹配输入字符串的开始位置$匹配输入字符串的结束位置\b匹配一个单词的边界\B匹配非\b
“零宽断言”,“零宽”代表下面表达式里的 y 仅仅是匹配 x 时的条件,并不影响之后对 y 的匹配
此处的 x 与 y 可以是字符串
- x
(?=y)仅匹配后面接 y 的 x - x
(?!y)仅匹配后面不接 y 的 x (?<=y)x 仅匹配前面接 y 的 x(?<!y)x 仅匹配前面不接 y 的 x
后两条零宽断言有诸多的使用限制
限制匹配数量
*匹配前面的子表达式 不小于 0 次+匹配前面的子表达式 不小于 1 次?匹配前面的子表达式 0或1 次{n}匹配前面的子表达式 刚好 n 次{n,}匹配前面的子表达式 至少 n 次{n,m}匹配前面的子表达式 n 到 m 次,在逗号和两个数之间没有空格
- quantifiers
?quantifiers 为上述数量限定符,?使此数量限定符匹配的子表达式尽可能少
分组、匹配并存储
分组可以显式地分隔正则表达式的子表达式
(subexp)匹配 subexp,并将结果存储到 分组编号(从1开始)中(?<name>subexp)匹配子表达式,并存储到 name 中
(?:subexp)匹配子表达式,但不存储
上文“零宽断言”虽然形似分组,但其既不匹配也不存储
匹配被存储的内容
\分组编号 匹配 分组编号 中的值\k<name>匹配 name 中的值
在替换中使用被存储的字符串
在替换模式下,用于替换正则表达式匹配的值
$分组编号 表示 分组编号 里的值${name}表示 name 里的值$$表示$字符
通配符(WildCard)
匹配文件名或目录名
*匹配任意字符任意次?匹配任意字符一次[xyz][a-z]匹配指定的字符[^xyz][^a-z]匹配非其中的任意字符~本用户的家目录~username username 的家目录