今天进入python正则表达式的入门学习
学习正则表达式的初衷还是为了awd比赛做准备
(好吧,其实学习python都是为了ctf啊)
学习的目的就是为了可以提取awd时的flag
那么开始我们的正则表达式的学习!
学习开始前,推荐使用两个网站进行正则表达式的学习~
编程胶囊-正则表达式入门
正则表达式在线构建、测试
如果只是使用正则表达式来匹配文本,没有什么意义,毕竟检测一个文本中是否有另一个字符串本来就非常简单。
正则表达式强大的地方在于它可以迅速地用极简单的方式达到字符串的复杂控制。
字符组([]
)允许匹配一组可能出现的字符。
例如匹配python、Python
可以使用
[pP]ython
来匹配
有一些常见的字符组非常大,比如,我们要匹配任意的数字,如果依照上述代码,每次我们都需要使用[0123456789]
。
但是这样好吗?
如果要匹配从a-z
的字母呢?我想你肯定不愿意从a
写到z
了!
为了适应这一点,正则表达式引擎在字符组中使用连字符(-)
代表区间,依照这个规则,我们可以总结出三点:
[0-9]
;[a-z]
;[A-Z]
。正则表达使用了 -
号代表了区间,但是我们有时候需要匹配的符号就是 -
号,该怎么办呢?
这个时候我们需要对-
号进行转义操作,即 \-
。
在正则中使用 \
就可以进行对特殊符号进行转义,对 -
进行转义就可以表示为 \-
,即 \-
就代表了 -
号本身。
偷偷告诉你,转义符
\
也适用于其他的符号,例如匹配圆括号可以使用\(
可以通过在字符数组开头使用 ^
字符实现取反操作,从而可以反转一个字符组(意味着会匹配任何指定字符之外的所有字符)。
放在字符组内才是取反!
例如
[^0-9]
匹配除了数字之外的所有
\d
所有数字
\w
所有数字+字母大小写
\s
匹配空白字符,比如空格、tab、换行等
\b \b
匹配单词边界
两个\b之间是匹配的单词边界
例如
我们知道、
\d是数字
\w是数字+字母
\s是空白
那么如何取反?——采用大写即可
\D是非数字
\W是非数字、非字母
\S是非空白
^在字符组外面,表示以什么开始
$在字符串外面,表示以什么结尾
在正则表达式中
.
匹配任意字符,但是不能匹配换行符(\n)
有时,我们可能想要匹配一个单词的不同写法,比如color
和colour
,或者honor
与honour
。
这个时候我们可以使用 ?
符号指定一个字符、字符组或其他基本单元可选,这意味着正则表达式引擎将会期望该字符出现零次或一次。
在一个字符组后加上{N}
就可以表示在它之前的字符组出现N
次。
可能有时候,我们不知道具体要匹配字符组要重复的次数,比如身份证有15
位也有18
位的。
这里重复区间就可以出场了,语法:{M,N}
,M
是下界而N
是上界。
闭区间不写即可表示匹配一个或无数个。
速写
+
等价于{1,}
,*
等价于{0,}
。
正则表达式的基础内容到此结束,如果想深入学习,可以查看正则表达式的进阶内容