正则表达式 -- 一文成为正则老司机

CTFWeb——Bugku秋名山老司机 详细题解 1 阅读详情
概述

本文是对《正则表达式必知必会的》的知识点梳理。本书总结了工程中常用的正则表达式用法,梳理出来便于日常查找和复习。

文中所有正则表达式示例用python3中的re包作为演示。

目录

1 匹配单个字符
2 匹配一组字符
3 使用元字符

1 匹配单个字符

本节主要讲单个字符通配符“.”和转义元字符“\”的使用。
元字符:有特殊含义的字符,而不是字符本身含义。

1.1 “.”的使用
>>> import re
>>> string = "hello world!"
>>> re.findall(".ll.", string)
['ello']

如上,“.”匹配上了"ll"左边的“e”和右边的“o”。

group(0)可以得到匹配上的字符串,相应的还有group(1),group(2),… 将在后面介绍。

如果需要匹配“.”本身,则需要转义字符“\”来将“.”的特殊含义转义到"."本身。例子如下:

>>> string = "There are some serects in serect.txt."
>>> re.findall("serect.", string)
['serects', 'serect.']

>>> re.findall("serect\.", string)
['serect.']

如上,当不对“.”进行转义时,匹配到了’serects’和’serect.’,因为“.”可以匹配任意字符;当转义之后,只匹配上了’serect.’,此时的“.”只能匹配“.”本身了。

2 匹配一组字符

本节学习学习如何和字符集合打交道。

2.1 匹配多个字符中的某一个

假如我们需要从一段字符串中找出“cat.txt”,其中“cat”的任意字符可能是大写。

>>> string = "12ad cat.txt cAt.txt, CAt.txt"
>>> re.findall("[cC][aA][tT]\.txt", string)
['cat.txt', 'cAt.txt', 'CAt.txt']

其中“[”和“]”不匹配任何字符,只负责定义一个字符集合,可以匹配字符集合中任意一个元素。

2.2 利用字符集合区间

在2.1例子的基础上,假如cat后面有一个数字,如“cat1.txt”,我们需要找出所有这些文件名。

>>> string = "12ad cat1.txt cAt5.txt, CAt8.txt"
>>> re.findall("[cC][aA][tT][0123456789]\.txt", string)
['cat1.txt', 'cAt5.txt', 'CAt8.txt']
>>> re.findall("[cC][aA][tT][0-9]\.txt", string)
['cat1.txt', 'cAt5.txt', 'CAt8.txt']

如上所示,“-”表示字符区间,[0-9]等价于[0123456789]。
常用的字符区间还有:

  • A-Z
  • a-z
  • A-z,这个区间不常用,因为Z和a之间还包含“[”和“^”等ASCII表中的字符。

字符集合区间非常有用,比如笔者就经常用字符区间来从一段文本中匹配中文,如下所示:

>>> text = "asdd13我sfg12爱n 中98kiajh国-2"
>>> re.findall("[\u4e00-\u9fa5]+", text)
['我', '爱', '中', '国']

其中“\u4e00“,”\u9fa5”分别是中文的utf-8编码的开始和结束编码。“+”表示至少匹配一个字符,后面会讲到。

注意:“-”字符在[和]之间时表示区间,而在集合之外的地方,“-”只是一个普通字符,与“-”匹配时不需转义。

2.3 取非匹配

在2.2例子的基础上,假如我们需要匹配cat加数字的文件,如“cat1.txt”,而不能匹配cat加字母的文件,如“catp.txt”文件。

>>> string = "12ad cat1.txt catp.txt cAt5.txt, CAt8.txt CAto.txt"
>>> re.findall("[cC][aA][tT][^a-zA-Z]\.txt", string)
['cat1.txt', 'cAt5.txt', 'CAt8.txt']

说明:"^"为取非匹配,用来排除字符集合中所有字符。上面例子中则是:除了a-z和A-Z中的所有字符都可以匹配。

3 使用元字符

前文提到过,元字符就是有着特殊含义饿的字符。如“.”可以用来匹配任何一个单个字符;“[”标志这一个字符集合的开始。当需要匹配元字符的字符时,需要用“\”进行转义。

本节将介绍更多有用的元字符。

3.1 匹配空白字符
元字符说明
\f换页符
\n换行符
\r回车符
\t制表符
\v垂直制表符
\s任何一个空白字符(等价于[\f\n\r\t\v])
\S任何一个非空白字符(等价于[^\f\n\r\t\v])

注意:

  1. \r\n匹配一个“回车+换行”组合,许多操作系统(比如windows)把这个组合作为文本行的结束标签。
  2. .和[是元字符,但前提是你没有对它们进行转义;f和n也是元字符,但前提是你对它们进行了转义。
3.2 匹配特定的字符类别
  1. 匹配数字
元字符说明
\d任何一个数字字符(等价于[0-9])
\D任何一个非数字字符(等价于[^0-9])
  1. 匹配字母和数字
元字符说明
\w任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-ZA-Z0-9_])
\W任何一个非字母数字字符或非下划线字符(等价于[^a-ZA-Z0-9_])

说明:因为字母数字和下划线常用于各种文件名、目录名、变量名等。

4 重复匹配

未完待续。。。

Bug-CTF-秋名山老司机(正则匹配) 题目: 没有啥思路,意外地刷新了一下页面,发现数值变化了 再刷新一次试试,出来一个提示,大概意思是需要提交结果,这里也不知道该怎么传参,也不晓得怎么写这个脚本,只能参考其他大佬的思路了 解题:        查看其他大佬的解题思路都是大概都是写了一个正则,然后计算结果进行get提交,由于没有学习过正则表达式,只能现学现卖了。 http://deerchao.net/tuto... 阅读详情

相关推荐

SRE校招面试全攻略:从基础理论到实战场景解析

本文为SRE(站点可靠性工程)校招面试提供全面攻略,涵盖计算机基础、运维核心技能、场景设计与系统架构等关键模块。文章结合真实面试真题,解析了从Linux原理、网络协议到容器化、监控告警等实战考点,并分享了高可用设计、故障排查等工程思维,旨在帮助应届生夯实基础、理清思路,从容应对SRE校招挑战。

bush的博客 644

Bugku之秋名山老司机

秋名山老司机 需要在2s内计算出来并提交,这个通过人工是不可能的,所以只能通过自己写脚本来计算并立即提交。 脚本如下也带有注释: import re import requests s = requests.Session() r = s.get("http://120.24.86.145:8002/qiumings...

weixin_42859966的博客 4361

Jetson AGX ORIN硬件初始化和环境部署

orin预安装了ubuntu20.04,只需开机,像重装系统一样设置用户信息即可,可以参考官网的教程[https://developer.nvidia.com/embedded/learn/get-started-jetson-agx-orin-devkit],官网提供了两种方式:一种是orin + 显示器,orin有提供DP接口,你需要准备一台显示器,最好也是有DP口的,因为我用DP转HDMI的连的,分辨率会受影响。确认安装的路径,一般直接回车安装在默认的 /home/你的名字/anaconda3。

TracyGC的博客 3834

bugku 秋名山老司机

bugku之秋名山老司机   题目连接:http://123.206.87.240:8002/qiumingshan/      一点进去是这样的    请在两秒内计算这个式子。。。怎么可能算的出来 查看源码,无果。。 burp抓包 无果 再次点进这个题目发现式子会变,于是多刷新几次,出现了这个界面    ...

爱党人士 1116

相控阵雷达仿真入门:TWS与TAS模式实战解析(附代码示例)

本文深入解析相控阵雷达仿真中的TWS(边搜索边跟踪)与TAS(搜索加跟踪)模式,提供实战代码示例和优化策略。通过简化模型设计和对象化建模,帮助开发者快速构建高效仿真系统,适用于军事推演和装备评估。文章涵盖核心逻辑、数据结构设计及性能优化技巧,提升仿真效率与准确性。

weixin_30687051的博客 453

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 948

爬虫笔记-Bugku秋名山老司机(入门)

简单的爬虫入门笔记,和爬虫在CTF上的运用。

sanqin_的博客 509

UE4_后期处理六—夜视仪、扫描线

观察下面一组蓝图节点的效果:当把角色的自定义深度通道开启:画面效果如图:这样我们就得到了一个这样的黑白蒙版。

Growthofnotes的博客 1733

正则表达式是如何让你的网页卡住的

概述 正则表达式在我们日程的工作项目中,应该是一个经常用到的技能。在做一些字符的匹配和处理的过程中,发挥了很大的作用。我们这篇文章主要是通过一个我在工作中遇到的性能问题,来探究下正则表达式是如何影响我们的代码性能的。在我们遇到了正则表达式有性能瓶颈的时候,我们应该如何的来对它进行优化? 如果对正则表达式还没有什么概念,或者说不了解的同学,可以先参考我之前写过的博客: 正则表达式系列之初级入门篇 正则表达式系列之中级进阶篇 问题现状 在我们日常的工作中,如果不需要去调整正则表达式的话

weixin_42899690的博客 636

抖音a_bogus参数逆向避坑指南:从环境检测到XHR请求的全流程解析

本文详细解析了抖音a_bogus参数在v1.0.1.19版本下的逆向工程全流程,重点介绍了如何通过PyV8Env框架进行有效的补环境操作,以绕过严格的环境检测。内容涵盖从环境初始化、关键事件触发到模拟XHR请求获取签名的完整步骤,并提供了可运行的Python代码示例和常见检测点的避坑指南,帮助开发者稳定生成有效的a_bogus参数。

tech5的博客 600

从Gitee上部署视觉工程到Linux虚拟机

(使用SVM来识别装甲板的编号,此处手机上的图片中只有灯条没有数字,SVM无法识别出编号。这两行代码的意义是,当SVM识别不出或者识别不到编号时,把装甲板的编号默认为2号。找到自瞄程序中,数字识别类下的这两行代码,把注释去掉。这样,每次打开新的终端时,环境变量都会自动设置。(2)查看虚拟机设置选项,检查虚拟机USB接口是否为3.0及以上的接口。如果不是,要更改好。这样,每次打开新的终端时,环境变量都会自动设置。后,每次打开终端时自动设置这些环境变量,你可以将。打开第一个终端,用来挂ROS的内核启动页面。

2301_81035291的博客 1520

Bugku:web 秋名山老司机

​打开这道题,发现有一点提示,是不是老司机试试就知道。 自然是要点进去一探究竟的。 里面的提示很过分,2秒钟就要计算出一大串的计算式,突然想到如果用手动计算再POST上去肯定有坑,所以刷新了一下。 果不其然啊!!老贼。 也就是说你用人来做这道题肯定是不行的,必须要借助编程的力量。 之前还没有遇到用python可以编写的题目,虽然理了一下思路,但是还是先从网络上寻找别人的方法来研究一下。 老生常谈,打开源代码看一下,联想到这个计算式是利用...

qq_26961571的博客 459

嵌入式NuttX RTOS面试题及参考答案

NuttX 的板级支持包(BSP)是一组软件组件,用于将 NuttX 操作系统适配到特定的硬件平台上。BSP 提供了硬件抽象层,使得 NuttX 能够与硬件进行交互,包括初始化硬件设备、提供设备驱动程序等。BSP 的主要作用是隐藏硬件细节,为上层应用程序和操作系统内核提供统一的接口,从而提高软件的可移植性和可维护性。开发 NuttX 的 BSP 通常需要以下步骤:硬件分析:首先需要对目标硬件平台进行详细的分析,了解硬件的架构、处理器类型、外设接口等信息。

大模型大数据攻城狮的专栏 1304

判断是不是链接 正则_正则表达式是如何让你的网页卡住的

点击上方“前端印象”,选择“设为星标”第一时间关注技术干货!作者:hjava原文链接:https://segmentfault.com/a/1190000038320217概述正则表达式在我们日程的工作项目中,应该是一个经常用到的技能。在做一些字符的匹配和处理的过程中,发挥了很大的作用。我们这篇文章主要是通过一个我在工作中遇到的性能问题,来探究下正则表达式是如何影响我们的代码性能的。在我...

weixin_39716877的博客 87

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

bugKuctf-秋名山老司机

bugKuctf-秋名山老司机欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 ...

second_dream99的博客 1843

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Bugku】秋名山老司机 详细题解 Writeup

import requests import re url = 'http://123.206.87.240:8002/qiumingshan/' s = requests.Session() req = s.get(url) expression = re.search(r'(\d+[+\-*])+(\d+)', req.text).group() # expression = req.text[req.text.find('<div>')+5:req.text.find('=?')] re

algae 1600

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python正则表达式

正则表达式 1. re模块 re模块是python提供的专门用支持正则表达式的一个模块 1.1 fullmatch(正则表达式, 字符串) 让正则表达式和整个字符串进行匹配(完全匹配),匹配失败返回None,匹配成功返回匹配对象 match(正则表达式, 字符串) - 匹配字符串开头(判断字符串的开头是否符合正则的规则),匹配失败返回None,匹配成功返回匹配对象 result = re.fullmatch(r'(\d{3})-([A-Z]+)', '345-K') print(resul

Start9186的博客 1023

秋名山老司机(在python中添加request的模块)

1、秋名山老司机 题目: 解答: 其一:第 7 行是利用正则表达式截取响应内容中的算术表达式。首先引入 re 模块,其次用 search() 匹配算术表达式,匹配成功后用 group() 返回算术表达式的字符串。(想掌握正则表达式,还是要多看、多想、多练,毕竟应用场合非常之广) 其二:search() 的第一个参数是匹配的正则表达式,第二个参数是要匹配的字符串。其中 \d+代表一个或多个数字;...

qq_44598397的博客 634

Bugku-web-秋名山老司机

秋名山老司机 进来之后会发现让算一个非常复杂的算式,刷新几遍后会发现 让以post方式传一个值,查看源码以后也没有什么收获,所以百度了一下是叫快速反弹post请求 快速反弹post请求:在 HTTP 响应头获取了一段有效期很短的 key 值后,需要将经过处理后的 key 值快速 POST 给服务器,若 key 值还在有效期内,则服务器返回最终的 flag。 解决这类方法一般会写python脚本,先学一下requests: GET和POST区别:请求参数的话,get和post是不同的,get是params

Pz1o的博客 358

秋名山老司机(BS4与正则的比拼)

因为嘉伟思杯里的一个脚本题目,16进制计算,python3正则还没学,所以没写出来。大佬跟我说也可以用BS4,从DOM上下手,直接爬下来直接一个eval就搞定了,eval可以像这样计算16进制,eval('0x2b+0x37')。BUGKU已经写了很多了,还几题没写,慢慢的续上。写过的就不发WP了,百度都有,就是像记录自己的学习历程。从原来的不懂,到现在的会。 呢么进入正题:),进入题目链接后,...

weixin_30594001的博客 272

正则表达式是如何让你的网页卡住的(优化100ms到2ms)

授权转载自:hjavahttps://segmentfault.com/a/1190000038320217概述正则表达式在我们日程的工作项目中,应该是一个经常用到的技能。在做一些字符的...

祈澈菇凉 802

CTF_EXP01:BugkuCTF 秋名山老司机

CTF_EXP 第一周ctf_exp01: BugkuCTF 秋名山老司机ctf_exp02: XCTF PHP2ctf_exp03: [SUCTF 2019] EasySQL 第一周入门EXP,挑选了几道简单的CTF题目上手,主要都是通过Python中的Reques模块进行GET和POST传参,对可能的结果进行限制与筛选,实现输入题目链接即可得到flag。 ctf_exp01: BugkuCTF 秋名山老司机 题目:BugkuCTF 秋名山老司机 提示为通过POST方式传入变量value的值, 构造如下

Senimo 543

Regular Expression:Python遇见正则表达式

Python正则表达式

OneFine的技术博客 1269

用Python开车的老司机

简介Python可以进行网络爬虫的故事已经不是新鲜事了,但是用爬虫开车抓图的老司机可数量不多。这次要实现的是Python的”老司机功能”,利用了多个网络相关的模块:re正则表达式模块,用于解析html内的标签;os操作系统模块,用于管理文件;urllib网页模块,用于下载和转译html内容;urlparse网址解析模块,用于提取域名等信息。正片废话不多说,驾照在此:#coding=utf-8 imp

domybest111的博客 2023
上一篇: leetcode 1388. 3n 块披萨 动态规划 python
下一篇: 算法之旋转数组的查找问题整理(附二分查找模板)
Elmerr
博客等级 码龄12年 178粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值