当前位置: 首页 > news >正文

正则表达式学习指南

正则表达式学习指南

在编程的世界里,正则表达式(Regular Expressions,简称regex)是一门不可或缺的艺术,它赋予了开发者强大的文本处理能力,让看似复杂的字符串匹配和替换任务变得简单而高效。本文旨在为初学者揭开正则表达式的神秘面纱,引导你掌握这一强大工具,成为文本处理领域的高手。

一、正则表达式简介

正则表达式是一种模式匹配语言,用于在文本中搜索、替换或提取符合特定规则的字符串。无论是验证输入数据、清洗数据、还是从大量文本中提取信息,正则表达式都是你的得力助手。

二、基础语法入门

1. 字符匹配

  • .(点号):匹配任意单个字符(除换行符外)。
  • [abc]:匹配括号内的任何一个字符,如’a’、‘b’或’c’。
  • [^abc]:匹配除括号内字符之外的任何字符。
  • \d:匹配数字(0-9)。
  • \D:匹配非数字字符。
  • \w:匹配字母、数字或下划线。与 "[A-Za-z0-9_]" 等效。
  • \W:匹配非字母、数字或下划线的字符。与 “[^A-Za-z0-9_]” 等效。
  • \s:匹配任何空白字符,如空格、制表符、换页符等。
  • \S:匹配非空白字符。

2. 量词

  • *:匹配前面元素的零次或多次出现。
  • +:匹配前面元素的一次或多次出现。
  • ?:匹配前面元素的零次或一次出现。
  • {n}:匹配前面元素恰好 n 次出现。
  • {n,}:匹配前面元素至少 n 次出现。
  • {n,m}:匹配前面元素至少n次,但不超过m次出现。

3. 特殊字符与分组

  • \:用于转义特殊字符,使其作为普通字符处理。
  • (expr):将expr视为一个单元进行匹配,并可用于捕获匹配的内容。
  • |:表示选择,匹配左边或右边的表达式。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。

三、实战演练

1. 邮箱验证

假设我们要验证一个字符串是否符合邮箱的基本格式,可以使用如下正则表达式:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • ^ 表示字符串开始。
  • [a-zA-Z0-9._%+-]+ 匹配用户名部分,可以包含字母、数字、点号、下划线、百分号、加号、减号。
  • @ 必须出现的符号。
  • [a-zA-Z0-9.-]+ 匹配域名部分。
  • \. 必须出现的点号,用来分隔域名和顶级域名。
  • [a-zA-Z]{2,} 匹配至少两个字母的顶级域名。
  • $ 表示字符串结束。

2. 提取URL中的域名

如果我们想从一段文本中提取所有的网址域名,可以使用以下正则:

\b(?:https?|ftp)://[^\s/$.?#].[^\s]*
  • \b 单词边界,确保URL是独立的。
  • (?:https?|ftp) 匹配http、https或ftp协议。
  • :// URL中协议后的分隔符。
  • [^\s/$.?#] 匹配除了空白、斜杠、问号、点号、井号之外的字符,即域名开始。
  • [^\s]* 匹配域名剩余部分,直到遇到空白字符。

四、在线测试工具

学习正则表达式的过程中,推荐使用在线测试工具如 RegExr、Regex101 等,它们不仅提供了实时的匹配预览,还内置了详细的教程和模式解释,极大提升了学习效率。

工具地址:

  • 正则表达式可视化工具 | 菜鸟工具 (jyshare.com)

  • 正则表达式在线测试 | 菜鸟工具 (jyshare.com)

  • RegExr: Learn, Build, & Test RegEx

  • regex101: build, test, and debug regex

学习参考

  • 正则表达式 – 教程 | 菜鸟教程 (runoob.com)
  • Java 正则表达式 | 菜鸟教程 (runoob.com)
http://www.xdnf.cn/news/122077.html

相关文章:

  • 深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南
  • 高等数学同步测试卷 同济7版 试卷部分 上 做题记录 第四章 不定积分同步测试卷 A卷
  • flutter 中各种日志
  • Flutter 在全新 Platform 和 UI 线程合并后,出现了什么大坑和变化?
  • 【Qt6 QML Book 基础】07:布局项 —— 锚定布局与动态交互(附完整可运行代码)
  • 使用localStorage的方式存储数据,刷新之后,无用户消息,需要重新登录,,localStorage 与 sessionStorage 的区别
  • 实时操作系统在服务型机器人中的关键作用
  • 小刚说C语言刷题——1317正多边形每个内角的度数?
  • Pikachu靶场-unsafe upfileupload
  • 每日Html 4.24
  • 2025 年 Odoo 安装与部署全攻略
  • 2026届华为海思秋暑期IC实习秋招笔试真题(2025.04.23更新)
  • index.htm 文件是什么:网页开发的入门基础
  • 架构-系统可靠性分析与设计
  • js 对象深拷贝、浅拷贝有哪些方法/设拷贝循环引用报错
  • 从机械应答到智能对话:大模型为呼叫注入智慧新动能
  • AD16如何执行DRC检测
  • 事务详细介绍
  • SVN钩子脚本获取日志中文乱码解决办法
  • Pikachu靶场
  • GIT 使用小记
  • Electron Forge【实战】百度智能云千帆大模型 —— AI聊天
  • nuxt3持久化存储全局变量
  • 【深度学习核心技术解析】从理论到实践的全链路指南
  • 【Python解释器】Pycharm中找不到Python打包工具-解决办法
  • 优化Nginx的下载功能
  • EFISH-SBC-RK3588无人机地面基准站项目
  • Spring 中@Autowired,@Resource,@Inject 注解实现原理
  • 中间系统-SPF计算
  • 如何规避矩阵运营中的限流风险及解决方案