day4-3正则表达式
1.为什么要正则表达式:
-
只要图片前面的(http://47.109.149.251:5022)是对的,后面输入什么都可以,这显然是不科学的,
![]()
-
所以需要正则表达式来屏蔽一些非法的访问:即实现:自定义 URL 转换器
2.正则表达式(Regular Expression)
正则表达式(Regex)是一种强大的 文本模式匹配工具,用于在字符串中查找、替换或提取符合特定规则的子串。几乎所有编程语言(Python、Java、JavaScript 等)和命令行工具(grep、sed、awk)都支持它。
来自deepseek
-
1.普通字符:
-
2.元字符:
-
'.' -> 匹配任意单个字符(除换行符)
比如字符串"hello" 的 'he' 可以被 'h.'匹配
- '[...]' ->匹配括号内的任意一个字符
比如 字符串"1470812" 的"14" 可以被 '1[3,4,5,7,9]' 匹配
- '{n}' ->匹配前一个字符 恰好 n 次(量词)
比如 "5{5}" 要求数字 5 连续出现 5 次
比如中国号码的手机号组成是:130-132是联不通,133是电不信 134-139是移不动
假设你只需要 移不动的手机号码(11位)
正则表达式应该是: [1][3][4-9][0-9]{8}
表示:
以 13 开头,第三位是 4-9(如 134、135、...、139)
后接任意 8 位数字(如 12345678)
3.自定义转换器
- 重写一下app.py:
点击查看代码
from flask import Flask,render_template,request
from werkzeug.routing import BaseConverter
class YearConverter(BaseConverter):
regex=r'[2][0][0,1,2][0-9]{1}'#范围2000-2029
app=Flask(__name__)
app.url_map.converters['year']=YearConverter
@app.route('/<year:year>')
def home(year):
print(f"访问的url:{request.url}")
print(f"请求的方法:{request.method}")
return render_template("one.html",year=year)
@app.route('/index')
def index():
return "这是一个index"
if __name__ == '__main__':
app.run(host='0.0.0.0',port=5022,debug=True)
-
发现上面那个链接已经不可以访问了(无法访问当前页面)
![]()
-
而且(http://47.109.149.251:5022/)也无法访问:
![]()
但是:(http://47.109.149.251:5022/static/1.png)仍然可以访问 -
原因:Flask 默认提供/static/目录的静态文件服务,与自定义路由无关
![]()
-
(http://47.109.149.251:5022/)也无法访问可以添加代码:
点击查看代码
@app.route('/')
def index():
return render_template("index.html")
- (http://47.109.149.251:5022/)+[2000-2029]完全是可以访问的
![]()






浙公网安备 33010602011771号