正则表达式入门

概述

学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’字符

0

\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次,尽可能少

正向和负向预查

(?=...)(正向肯定预查)

(?!...)(正向否定预查)

(?<=...)(反向肯定预查)

(?<!...)(反向否定预查)