正则表达式与通配符
正则表达式
正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,通常被包裹在 /
与 /
之间
正则表达式有诸多不同的实现,这篇笔记参考了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
匹配制表符\u
nnnn 匹配 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 的家目录