2.3web服务器
程序员文章站
2022-03-02 23:04:14
...
一、正则表达式
- re模块的操作
import re
result=re.match("[Hh]ello",“hello,world”) # 匹配
print(result.group()) # 使用group返回匹配到的结果 - 匹配单个字符
. 匹配任意一个字符,除\n
[]匹配括号中列举的字符
\d匹配数字
\D匹配非数字
\s匹配空白字符,eg:tab、\t、空格等
\S匹配非空白字符
\w匹配字母
\W匹配单个字母 - 匹配多个字母
*匹配前一个字符出现零次或者无限次
+匹配前一个字符出现1次或者无限次
?匹配前一个字符出现0次或者1次
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符穿线m到n次 - 匹配开头和结尾
^匹配开头,开头写上这个表示以这个之后的子母开头
$匹配结尾,结尾写上这个表示以这个之前的字母结尾
import re
email_list = ["[email protected]", "[email protected]", "[email protected]"]
for email in email_list:
ret = re.match("[\w]{4,20}@163\.com$", email)
if ret:
print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group()))
else:
print("%s 不符合要求" % email)
- 匹配分组
| 匹配左右任何一个表达式
(ab)将括号中的字符作为一个分组,还可以去除括号中的数据
ret = re.match("\w{4,20}@(163|126|qq)\.com", "[email protected]")
print(ret.group()) # [email protected]
>>> ret = re.match("([^-]*)-(\d+)","010-12345678")
>>> ret.group()
'010-12345678'
>>> ret.group(1)
'010'
>>> ret.group(2)
'12345678'
\num:引用分组num匹配到的字符串
import re
labels = ["<html><h1>www.itcast.cn</h1></html>", "<html><h1>www.itcast.cn</h2></html>"]
for label in labels:
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", label)
if ret:
print("%s 是符合要求的标签" % ret.group())
else:
print("%s 不符合要求" % label)
(?P):起别名
(?P=name):引用别名为name分组匹配到的字符串
import re
ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
ret.group()
ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h2></html>")
ret.group()
- re高级用法
1】match是从开头进行匹配,匹配完所有的结果才结束,我们可以通过括号和group(num)来进行提取;
import re
a1=re.match("(\w+)","hello").group(1)
print(a1)
2】而search是只要匹配到一个符合正则的结果就会返回,不管你后面是否匹配到;
a2=re.search("\d{3}","电话:15294111014").group()
print(a2)
3】findall()这个函数可以匹配到所有满足该正则的结果
a3=re.findall("\d+","QQ:2303412579;电话:15294111014")
print(a3)
4】sub函数将匹配到的数字进行替换
import re
ret = re.sub(r"\d+", '998', "python = 997")
print(ret)
import re
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
ret = re.sub(r"\d+", add, "python = 997")
print(ret)
ret = re.sub(r"\d+", add, "python = 99")
print(ret)
5】split 根据匹配进行切割字符串,并返回一个列表
import re
ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)
- 贪婪与懒惰
在python中默认是贪婪的,我们可以通过在"*","?","+","{m,n}"后面加上?,使贪婪变成懒惰。 - r的作用
Python中字符串前面加上 r 表示原生字符串
二、http协议
- http协议分析
1】请求request
GET / HTTP/1.1 浏览器请求的方式
Host: 127.0.0.1:7890 请求的目标主机和端口
Connection: keep-alive 连接的方式
Upgrade-Insecure-Requests: 1 浏览器可以接收的格式
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3724.8 Safari/537.36 浏览器的版本
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br 能够接受的格式
Accept-Language: zh-CN,zh;q=0.9,ja;q=0.8 能够接收识别的语言
Cookie: csrftoken=Eq9dSHbMPoj6FlzpnmfutIT2bEhjJFoYaCZa97C1GpgXD01K2dNQahizP1K8HBXs
2】响应response
http使用的是tcp协议,请求的时候有请求头,响应的时候有响应头和响应体;
二、简单的web服务器
GET / HTTP/1.1
Host: 127.0.0.1:7890
hahaha
上一篇: 用c语言实现web服务器