概述
学PWN之余学点轻松的,跟着菜鸟驿站教程学学正则表达式
语法
普通字符
[ABC]
匹配[…]中所有字符
[^ABC]
匹配除了[…]中字符的所有字符,^
即逻辑非
[A-Z]
[A-Z]
表示所有大写字母这个区间,同理[a-z]
.
匹配出换行符(\n
,\r
)之外的任何单个字符
\s
匹配所有空白符,包括换行符
\S
匹配所有非空白符 [\s\S]
组合使用可以匹配所有
\w
匹配字母,数字,下划线.相当于[A-Za-z0-9_]
\d
匹配任意一个阿拉伯数字.相当于[0-9]
非打印字符
\cx
匹配由x指明的控制字符.且x的值必须为A-Z或a-z之一,不然将c视为一个原意的‘c’字符
\f
匹配一个换页符,等价于\x0c
和\cL
(\x0c即匹配十六进制0c对应的字符)
\n
匹配一个换行符.等价于\x0a
和\cJ
\r
匹配一个回车符.等价于\x0d
和\cM
\t
匹配一个制表符.等价于 \x09
和 \cI
\v
匹配一个垂直制表符.等价于\x0b
和\cK
特殊字符
要匹配这些字符本身需要通过在其前面加上转义字符\
这里仅作举例,后面其他部分再详细说明
$
,(
,)
,*
,+
,.
,[
,?
,\
,^
,{
,|
限定符
*
匹配前面的子表达式零次或多次.相当于{0,}
+
匹配前面的子表达式一次或多次.相当于{1,}
?
匹配前面的子表达式零次或一次.相当于{0,1}
{n}
n为一个非负整数,匹配确定的n次
{n,}
n为一个非负整数,至少匹配n次
{n,m}
n,m均为非负整数,其中n<=m,匹配最少n次最多m次
定位符
^
匹配输入字符串开始的位置(需放在正则表达式开头)
$
匹配输入字符串结尾的位置(需放在正则表达式结尾)
\b
匹配一个单词边界,即字与空格间的位置(注意位置)
\B
匹配非单词边界(注意位置)
选择
用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔
非捕获元
?=
exp1(?=exp2)
: 查找exp2前面的exp1
?<=
(?<=exp2)exp1
:查找 exp2 后面的 exp1
?!
exp1(?!exp2)
: 查找后面不是exp2的exp1
?<!
(?<!exp2)exp1
: 查找前面不是exp2的exp1
修饰符
标识符卸载正则表达式之外,格式为
/pattern/flags
,其中/
是作为正则表达式的定界符
i
(ignore case) 忽略大小写
g
(global) 全局匹配(查找所有匹配项,而不是在第一个匹配后停止)
m
(multline) 多行模式(使^
和$
匹配每行的开头和结尾,而不仅使整个字符串的开头和结尾)
s
(single line/dotall) 单行模式(使.
匹配包括换行符在内的所有字符)
u
(unicode) Unicode模式(启用完整的Unicode支持)
y
(sticky) 粘性匹配(从目标字符串的当前位置开始匹配)
x
(extended) 扩展模式(忽略模式中的空白和注释,使正则表达式更易读)
元字符
基本都是前文介绍过的,贪婪与非贪婪量词可以看下
基本元字符
.
^
$
\
上文都说过
字符类元字符
[]
定义字符集合,匹配其中任意一个字符
[^]
匹配不在方括号中的任意字符
-
连字符.在字符类中表示范围
量词元字符
*
+
?
{n}
{n,}
{n,m}
分组和选择元字符
()
|
特殊字符类元字符
\d
\D
匹配任意非数字
\w
\W
匹配任意非单词字符
\s
\S
边界匹配元字符
\b
\B
其他元字符
\n
\t
\r
\f
\v
贪婪与非贪婪量词
*?
零次或多次,尽可能少
+?
一次或多次,尽可能少
??
零次或一次,尽可能少
{n,m}?
n到m次,尽可能少
正向和负向预查
(?=...)
(正向肯定预查)
(?!...)
(正向否定预查)
(?<=...)
(反向肯定预查)
(?<!...)
(反向否定预查)