做qq主题的网站/百度的广告推广需要多少费用

做qq主题的网站,百度的广告推广需要多少费用,网页设计与网站开发基础教程,dz怎么做视频网站正则表达式的基础和应用 一、正则表达式核心语法(四大基石) 1. ​元字符(特殊符号)​ ​定位符 ^:匹配字符串开始位置 $:匹配字符串结束位置 \b:匹配单词边界​(如 \bword\b 匹配…

正则表达式的基础和应用

一、正则表达式核心语法(四大基石)

1. ​元字符(特殊符号)​
  • 定位符
    ^:匹配字符串开始位置
    $:匹配字符串结束位置
    \b:匹配单词边界​(如 \bword\b 匹配独立单词)
  • 字符类
    .:任意单个字符(默认不包括换行符)
    \d:数字(等价 [0-9]
    \w:字母、数字、下划线(等价 [a-zA-Z0-9_]
    \s:空白符(空格、Tab、换行等)
  • 转义符
    \:将特殊字符转为普通字符(如 \. 匹配真正的点号)
2. ​量词(重复次数)​
  • *:0次或多次
  • +:1次或多次
  • ?:0次或1次
  • {n}:精确n次
  • {n,}:至少n次
  • {n,m}:n到m次
3. ​字符集合与逻辑
  • [abc]:匹配a、b、c中的任意一个
  • [a-z]:匹配小写字母a到z
  • [^abc]:否定集合(匹配不在abc中的字符)
  • |:逻辑或(如 cat|dog 匹配"cat"或"dog")
4. ​分组与引用
  • ( ):捕获分组(可通过 \1 或 $1 反向引用)
  • (?: ):非捕获分组(仅用于逻辑分组)
  • (?P<name>):命名分组(Python中可通过名称引用)

二、正则引擎工作原理(NFA vs DFA)

1. ​NFA引擎(主流实现)​
  • 特点:支持回溯、捕获组、零宽断言等高级功能,但存在性能风险
  • 匹配流程
    1. 从起始位置尝试匹配
    2. 记录所有可能的分支(回溯点)
    3. 失败时退回最近回溯点继续尝试
    4. 直到匹配成功或完全失败
2. ​DFA引擎
  • 特点:无回溯,线性时间复杂度,但功能受限(不支持分组引用)
  • 流程:一次性扫描文本,无状态回退

三、关键应用场景与解决方案

1. ​数据验证(精准匹配)​
  • 邮箱验证

    ^[\w\.-]+@([\w-]+\.)+[\w-]{2,4}$  
    • ^ 和 $ 确保整行匹配
    • [\w\.-]+ 允许用户名包含字母、数字、点、减号
    • ([\w-]+\.)+ 匹配多级域名(如 "mail." 或 "google.com.")
    • [\w-]{2,4} 匹配顶级域名(如 com、org)
  • 强密码规则

    ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$  
    • (?=.*\d):正向预查确保包含数字
    • (?=.*[a-z]):必须有小写字母
    • (?=.*[A-Z]):必须有大写字母
    • .{8,}:总长度至少8位
2. ​数据提取(捕获关键信息)​
  • 从URL提取域名和路径

    ^https?://([^/?#]+)([^?#]*)  
    • 分组1 ([^/?#]+) 捕获域名(如 www.example.com
    • 分组2 ([^?#]*) 捕获路径(如 /path/to/page
  • 日志时间戳提取

    \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}
    • 精确匹配 YYYY-MM-DD HH:MM:SS 格式
3. ​文本清洗与替换
  • 删除HTML标签

    <[^>]+>  
    • 匹配所有以 < 开头、> 结尾的内容
    • 使用 re.sub(r'<[^>]+>', '', html) 替换为空
  • 格式化电话号码
    输入:1234567890 → 输出:(123) 456-7890

    re.sub(r'(\d{3})(\d{3})(\d{4})', r'(\1) \2-\3', phone)

四、性能优化与避坑指南

1. ​避免灾难性回溯
  • 危险模式(a+)+ 或 .*.*(嵌套量词导致指数级复杂度)
  • 优化方法
    • 用具体字符代替 .*(如 \d+ 代替 .*
    • 使用原子分组 (?>...)(部分引擎支持)
    • 添加锚点限制范围(如 ^...$
2. ​贪婪与非贪婪选择
  • 贪婪模式​(默认):.* 匹配尽可能多内容
    <div>.*</div> → 可能跨多个标签错误匹配
  • 非贪婪模式.*? 匹配最短结果
    <div>.*?</div> → 精确匹配单个标签内容
3. ​预编译与复用
# 预编译提升性能(适用于频繁调用场景)
pattern = re.compile(r'\d{3}-\d{4}')
pattern.findall('Tel: 123-4567')

五、进阶技巧

1. ​零宽断言(Lookaround)​
  • (?=...):正向先行断言(右侧必须满足条件)
    \d+(?=px) → 匹配 "100px" 中的 "100"
  • (?<=...):正向后行断言(左侧必须满足条件)
    (?<=\$)\d+ → 匹配 "$200" 中的 "200"
2. ​条件匹配
(?(id)yes|no) → 根据分组是否存在选择分支
  • 示例:匹配带区号的电话号码
    ($)? \d{3} (?(1)$|) → 匹配 "(123)" 或 "123"

六、好用的工具

  1. 调试工具
    • RegExr:实时高亮匹配结果,显示分组与回溯
    • Regex101:支持多语言引擎,提供错误解释
  2. 可视化工具
    Regexper:图形化展示正则逻辑

七、总结

正则表达式的核心在于 ​模式定义 与 ​引擎匹配机制 的结合。掌握以下要点即可应对90%的场景:

  1. 精准定位:用 ^$\b 约束边界
  2. 明确范围:用字符集合 [...] 和量词 {n,m} 减少模糊匹配
  3. 合理分组:通过 ( ) 提取关键数据
  4. 性能优先:避免嵌套量词,优先使用具体字符

以下是Python中正则表达式的用法


一、环境准备

1. 导入re模块

import re  # Python内置正则库

2. 原始字符串(Raw String)

正则表达式推荐使用原始字符串(前缀 r),避免Python字符串转义冲突:

pattern = r'\d+'  # 正确:匹配数字
pattern = '\\d+'   # 错误:需双重转义,可读性差

二、四大核心方法

1. re.match() - ​从开头匹配

  • 只匹配字符串开头,成功返回Match对象,否则返回None

text = "123abc"
result = re.match(r'\d+', text)
if result:print("匹配成功:", result.group())  # 输出: 123

2. re.search() - ​全局搜索

  • 扫描整个字符串,找到第一个匹配项

text = "abc456def"
result = re.search(r'\d+', text)
print(result.group())  # 输出: 456

3. re.findall() - ​查找所有匹配

  • 返回所有匹配结果的列表​(无分组时返回字符串列表)

text = "1a2b3c"
numbers = re.findall(r'\d', text)
print(numbers)  # 输出: ['1', '2', '3']

4. re.sub() - ​替换匹配内容

  • 将匹配内容替换为指定字符串

text = "2023-01-01"
new_text = re.sub(r'-', '/', text)
print(new_text)  # 输出: 2023/01/01

三、分组与捕获

1. 基本分组 ( )

  • 用括号分组,通过group(index)提取

text = "John:30"
pattern = r'(\w+):(\d+)'
match = re.search(pattern, text)
print(match.group(1))  # John
print(match.group(2))  # 30

2. 非捕获分组 (?: )

  • 分组但不捕获,节省内存

text = "apple orange"
pattern = r'(?:a|an|the) (\w+)'  # 匹配冠词后的单词但不捕获冠词
match = re.search(pattern, text)
print(match.group(1))  # apple

3. 命名分组 (?P<name>)

  • 为分组命名,提升可读性

text = "Date: 2023-08-15"
pattern = r'Date: (?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
match = re.search(pattern, text)
print(match.group('year'))   # 2023
print(match.groupdict())     # {'year': '2023', 'month': '08', 'day': '15'}

四、高级功能

1. 正则标志(Flags)

  • 控制匹配模式的全局行为

text = "Hello\nWorld"
# 多行模式(^和$匹配每行开头结尾)
re.findall(r'^\w+', text, flags=re.MULTILINE)  # 输出: ['Hello', 'World']
# 忽略大小写
re.findall(r'hello', text, flags=re.IGNORECASE)  # 输出: ['Hello']

2. 预编译正则表达式

  • 提升重复使用时的性能

pattern = re.compile(r'\d{3}-\d{4}')  # 编译为RegexObject
result = pattern.findall("Tel: 123-4567")  # ['123-4567']

3. 替换时使用函数

  • 动态生成替换内容

def to_upper(match):return match.group().upper()text = "hello world"
new_text = re.sub(r'\b\w', to_upper, text)
print(new_text)  # 输出: Hello World

五、经典实战案例

1. 验证邮箱格式

def validate_email(email):pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'return re.match(pattern, email) is not Noneprint(validate_email("user@example.com"))  # True
print(validate_email("invalid.email@"))     # False

2. 提取HTML链接

html = '<a href="https://example.com">Link</a>'
pattern = r'href="(https?://[^"]+)"'
match = re.search(pattern, html)
print(match.group(1))  # https://example.com

3. 转换日期格式

date = "2023-08-15"
new_date = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', date)
print(new_date)  # 08/15/2023

六、避坑指南

  1. 贪婪匹配陷阱
    使用 .*? 非贪婪模式避免过度匹配:

    text = "<div>Hello</div><div>World</div>"
    re.findall(r'<div>(.*?)</div>', text)  # ['Hello', 'World']
  2. 特殊字符转义
    匹配 .* 等符号需转义:

    re.findall(r'3\.14', "pi=3.14")  # ['3.14']
  3. 性能优化
    避免在循环中重复编译正则,优先使用预编译。


七、调试工具

  1. 在线测试
    RegExr:实时高亮匹配结果,显示分组信息

  2. 代码调试
    使用 re.DEBUG 标志查看正则解析过程:
    re.compile(r'\d+', re.DEBUG)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

串口通信函数汇总-ing

谢谢各位佬的阅读&#xff0c;本文是我自己的理解&#xff0c;如果您发现错误&#xff0c;麻烦请您指出&#xff0c;谢谢 首先谈谈我自己对于串口的理解&#xff0c;随便拿一个嵌入式的板子&#xff0c;它上面有两个引脚&#xff0c;一个是rx&#xff0c;一个是tx&#xff0c;r…

如何用HTML5 Canvas实现电子签名功能✍️

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&#…

2024年广州市智能网联汽车创新实践年度报告

政策法规方面&#xff0c;积极推进《广州市智能网联汽车创新发展条例》的制定和发布&#xff0c;不断完善法规标准体系&#xff0c;为产业创新发展营造良好政策环境&#xff1b;技术创新方面&#xff0c;企业加大研发投入&#xff0c;在自动驾驶算法、车联网安全等关键领域取得…

计算机操作系统(一) 什么是操作系统

计算机操作系统&#xff08;一&#xff09; 什么是操作系统 前言一、什么是操作系统二、操作系统的作用三、推动操作系统发展的主要动力总结&#xff08;核心概念速记&#xff09;&#xff1a; 前言 当你打开电脑、点击应用、播放音乐时&#xff0c;是谁在背后默默协调这一切&…

韦伯望远镜的拉格朗日点计算推导过程,包含MATLAB和python运动轨迹仿真代码

研究过程 起源与提出&#xff1a;1687 年牛顿提出 “三体问题”&#xff0c;旨在研究三个可视为质点的天体在相互之间万有引力作用下的运动规律&#xff0c;但因运动方程过于复杂&#xff0c;难以得到完全解。欧拉的贡献1&#xff1a;1767 年&#xff0c;瑞士数学家莱昂哈德・…

Gateway:网关路由与登录鉴权

在微服务架构中&#xff0c;用户登录和身份校验的处理方式确实与单体应用有所不同。在单体架构中&#xff0c;一旦用户通过身份验证&#xff0c;其会话信息可以在整个应用范围内共享&#xff0c;所有模块都能访问到用户信息。然而&#xff0c;在微服务架构下&#xff0c;每个服…

Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试(代码实现)

Vision Transformer (ViT)&#xff1a;将Transformer带入计算机视觉的革命性尝试 作为一名深度学习研究者&#xff0c;如果你对自然语言处理&#xff08;NLP&#xff09;领域的Transformer架构了如指掌&#xff0c;那么你一定不会对它在序列建模中的强大能力感到陌生。然而&am…

prompt大师高效提示词解析

Prompt大师李继刚高效提示词示例解析 一、「汉语新解」提示词 核心结构 采用Lisp语言框架嵌套中文语义&#xff0c;通过(defun 新汉语老师 ()...)定义角色风格&#xff08;融合奥斯卡王尔德、鲁迅的批判性语言&#xff09;&#xff0c;用(隐喻 (一针见血...))构建解释逻辑链。…

基于 Vue 的Deepseek流式加载对话Demo

目录 引言组件概述核心组件与功能实现1. 消息显示组件&#xff08;Message.vue&#xff09;2. 输入组件&#xff08;Input.vue&#xff09;3. 流式请求处理&#xff08;useDeepseek.ts&#xff09;4. 语音处理模块&#xff08;Voice.vue&#xff09; 总结Demo Github 地址 引言…

WPS二次开发系列:Android 第三方应用如何获取WPS端内文档

1.需求场景 在项目开发中碰到这种情况&#xff0c;我们需要利用WPS的文档管理能力&#xff0c;比如需要调用WPS的文件选择器&#xff0c;来选择文档&#xff0c;同时需要得到WPS选择的文档结果返回给我们的应用。之前在网上找到了很久都没有找到WPS移动端有相关的API接口文档和…

Flutter 基础组件 Text 详解

目录 1. 引言 2. 基本使用 3. 自定义样式 4. 文本对齐与溢出控制 5. 外边距 5.1 使用 Container 包裹 5.2 使用 Padding 组件 5.3 在 Row/Column 中使用 5.4 动态边距调整 5.5 关键区别说明 5.6 设置 margin 无效 6. 结论 相关推荐 1. 引言 Text 组件是 Flutter 中…

Acknowledgment.nack方法重试消费kafka消息异常

文章目录 问题示例异常 原因nack方法Acknowledgment接口实现类&#xff1a;ConsumerAcknowledgment实现类&#xff1a;ConsumerBatchAcknowledgment 解决方案1 批量消费指定index示例 2 单条消费示例 问题 使用BatchAcknowledgingMessageListener 批量消费Kafka消息&#xff0…

Java 反序列化 - commons collection 之困(一)

#01多余的碎碎念 说到 java 反序列化&#xff0c;去搜索的话能看到网上有很多分析关于 commons collection 利用链的文章&#xff0c;emm 我一开始看不懂&#xff0c;看到很多代码的图头晕。 这篇文章的话其实是我跟着 p 神的文章一路走下来的&#xff0c;所以整个逻辑会按照…

Linux账号和权限管理

用户账户管理 理论 /etc/passwd 该目录用于保存用户名&#xff0c;宿主目录&#xff0c;登录shel等基本信息 /etc/shadow 该目录用于保存 用户密码&#xff0c;账户有效期等信息 图上每一行中都有用“&#xff1a;”隔断的字段 字段含义&#xff1a; 第1字段:用户账号的名…

晋升系列4:学习方法

每一个成功的人&#xff0c;都是从底层开始打怪&#xff0c;不断的总结经验&#xff0c;一步一步打上来的。在这个过程中需要坚持、总结方法论。 对一件事情长久坚持的人其实比较少&#xff0c;在坚持的人中&#xff0c;不断的总结优化的更少&#xff0c;所以最终达到高级别的…

win32汇编环境,对话框中使用树形视图示例四

;运行效果,当点击张辽时,展示张辽的图像 ;当点击曹仁时,展示曹仁的图像 ;win32汇编环境,对话框中使用树形视图示例四 ;当点击树形视图treeview控件中的某项时,展示某些功能。这里展示的是当点到某个将领时,显示某个将领的图像 ;直接抄进RadAsm可编译运行。重要部分加备注。…

Windows server网络安全

摘要 安全策略 IP安全策略&#xff0c;简单的来说就是可以通过做相应的策略来达到放行、阻止相关的端口&#xff1b;放行、阻止相关的IP&#xff0c;如何做安全策略&#xff0c;小编为大家详细的写了相关的步骤&#xff1a; 解说步骤&#xff1a; 阻止所有&#xff1a; 打…

充电桩快速搭建springcloud(微服务)+前后端分离(vue),客户端实现微信小程序+ios+app使用uniapp(一处编写,处处编译)

充电桩管理系统是专为中小型充电桩运营商、企业和个人开发者设计的一套高效、灵活的管理平台。系统基于Spring Cloud微服务架构开发&#xff0c;采用模块化设计&#xff0c;支持单机部署与集群部署&#xff0c;能够根据业务需求动态扩展。系统前端使用uniapp框架&#xff0c;可…

小肥柴慢慢手写数据结构(C篇)(4-3 关于栈和队列的讨论)

小肥柴慢慢学习数据结构笔记&#xff08;C篇&#xff09;&#xff08;4-3 关于栈和队列的讨论&#xff09; 目录1 双端栈/队列2 栈与队列的相互转化2-1 栈转化成队列2-2 队列转化成栈 3 经典工程案例3-1 生产者和消费者模型&#xff08;再次重温环形缓冲区&#xff09;3-2 MapR…