正则表达式规则完整指南:它们是什么、如何工作以及实际示例

  • 正则表达式规则允许您有效地搜索、验证和转换文本。
  • 它的语法使用文字字符、元字符和量词来定义精确的模式。
  • 正则表达式在编程、系统管理、SEO 和高级数据编辑中至关重要。

正则表达式规则示例

正则表达式,通常称为 Regex,是开发、系统管理和处理大量文本领域中最强大和用途最广泛的资源之一。 然而,对于许多初次接触正则表达式的用户和程序员来说,它的语法可能晦涩难懂,甚至令人不知所措。掌握正则表达式的规则和模式,可以以无与伦比的效率和灵活性搜索、过滤、验证和转换文本。

您是否想过如何在 IT 项目中查找文档中的复杂模式、验证表单、转换数据或自动化搜索过程? 无论您是开发人员、系统管理员,还是仅仅是一名好奇的用户,本文都适合您。准备好阅读一份完整、实用且最重要的、清晰易懂的正则表达式规则指南,以及它们在各种情境中的应用。

什么是正则表达式规则或正则表达式?

正则表达式(Regex,英文缩写为 正则表达式) 是字符序列或模式,能够定义在其他文本中查找、验证或操作文本的规则。 假设您正在寻找特定的短语、特定的格式(例如电子邮件、日期、电话号码)、符合特定条件的名称,或者您想要批量替换部分文本:在所有这些情况下, 正则表达式是理想的工具.

基本思想是 用一系列符号、字母和特殊运算符来描述我们要定位、验证或修改的文本必须满足的模式。例如,如果你想要查找短语中的所有数字,你可以定义一个简单的模式,即“任何数字字符”(例如 \d)。如果您想要更高级的功能,您可以构建更复杂的规则,例如:“所有以‘Copy’开头并以数字结尾的字符串。”

正则表达式语法

正则表达式的历史和演变

正则表达式诞生于20世纪中叶,属于形式逻辑和自动机理论领域。 它的第一个实际用途是在基于 UNIX 的系统中,其实用程序包括 ed, grep的, 口渴 y AWK. 随后,标准 POSIX 扩展了它的语法,并将其融入到多种环境中。后来,该语言 Perl的 将 Regex 提升到一个新的水平,增加了新功能并在开发者社区中推广它们。

在现在, 大多数编程语言都内置了 Regex (JavaScript、Python、Java、C#、PHP、Ruby 等),以及高级文本编辑器、操作系统、Web 框架和多种命令行实用程序。这使得正则表达式成为一种真正通用的语言,可用于在任何计算环境中处理文本。

正则表达式规则有什么用处?

正则表达式规则 它们不仅用于搜索,还可以验证、提取、转换并允许您在几秒钟内过滤或修改大量数据。

  • 在大量文本中寻找模式: 无需手动操作,即使在大型文件或数据库中也能查找电子邮件、URL、姓名、号码、日期等。
  • 验证用户输入: 在存储密码之前,检查密码是否符合要求、电话号码或电子邮件地址是否正确。
  • 修改并替换文本: 替换文本的特定部分,从删除 HTML 标签到规范数据格式。
  • 自动化流程: 根据非常精确的规则过滤日志、转换列表、分析日志文件或批量重命名文件。

正则表达式基础:基本概念

正则表达式规则由文字字符和元字符组合而成。理解这些元素是构建有用模式的基础。

1. 文字字符

文字字符准确表示您要搜索的字符。 例如,表达式 将在目标文本中按该顺序准确定位该序列。

2. 元字符:正则表达式的力量

元字符是扩展正则表达式含义的特殊符号,赋予其多功能性和强大功能。 最常见的包括:

  • . 点代表除换行符之外的任何字符。
  • [] 括号定义允许的字符类或集。
  • ^ 圆括号可以标记一行或一个单词的开头,或者,如果它括在括号中,则可以标记一个集合的否定。
  • $ 美元符号表示一行或文本的结束。
  • * 星号允许您搜索前一个元素的“零次或多次重复”。
  • + 加号搜索“一次或多次重复”。
  • ? 指示前一个元素是可选的(零次或一次)。
  • () 括号将表达式的各个部分分组以应用量词、提取子组或定义替代方案。
  • | 竖线代表逻辑选择“或”。
  • \ 反斜杠转义后面字符的特殊含义或引入缩写序列(例如 \d, \w, \s).

3.量词:控制重复

量词允许您定义字符、类或组应重复的次数:

  • *:零次或多次重复。
  • +:一次或多次。
  • ?:一次或根本不进行(可选)。
  • {不是}: 确切地 n 重复。
  • {n,}: 至少 n 次(无最大值)。
  • {n,m}: 之间 n y m 重复。

4. 字符类和缩写

字符类别可以让我们进一步缩小搜索范围:

  • [az]:任意小写字母。
  • [AZ]:大写字母。
  • [0-9]:任意数字。
  • [ABC]:字母 a、b 或 c。
  • [^xyz]:任意字符 例外 x,i z。
  • \d:十进制数字(相当于[0-9])。
  • \D:任何字符 没有 是一个数字。
  • \w:单词字符(字母、数字或下划线;相当于 [a-zA-Z0-9_])。
  • \W:任何非单词字符。
  • \s:空白(空格、制表符、换行符)。
  • \S:空格以外的任意字符。

5. 锚点:将模式放置在文本中

锚点允许您将模式放置在一行的开头或结尾,或者单词的开头/结尾。

  • ^:行或文本的开头。
  • $:行尾或文本结尾。
  • \b:单词边界(开始或结束)。
  • \B:非词边界点(内部)。

Regex 规则的实际示例

现在让我们看看这些规则如何应用于现实生活中的简单和高级场景,以便您可以快速将所学知识付诸实践。

  • 验证电子邮件: ^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$
  • 查找 DNI 号码: \b\d{8}[- ]?[trwagmyfpdxbnjzsqvhlcke]?\b
  • 检测 IP v4 地址: ^(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)(?:\.(?!$)|$)){4}$
  • 从 HTML 标签中提取 URL:
  • 检测 Java 中的注释行: //[^\r\n]*[\r\n]

高级逻辑和模式定制

正则表达式允许您通过组合组、替代、引用和高级量词来构建复杂的模式,从而允许您过滤、验证或定位非常具体的信息。

团体和协会

通过将模式的一部分括在括号中,我们创建了一个组。这使我们能够将量词应用于整个组、提取信息或引用子模式。

例如,表达式 ((ma)+b) 将匹配“mab”或“mamab”,但不匹配“maab”。稍后可以使用以下方式引用组 \1, \2等,非常适合寻找相似的重复模式。

替代项(|):正则表达式中的逻辑“或”

竖线 | 允许您定义替代方案:由此符号分隔的任何模式均有效。 例如,(boy|girl) 将匹配两个词。

使用 \ 转义元字符

反斜杠 \ 消除元字符的特殊含义或引入缩写序列至关重要。 例如,“\.”搜索文字句点,“\?”搜索问号,“\\”搜索反斜杠本身,等等。

贪婪和懒惰量词

默认情况下,正则表达式量词是贪婪的:它们会获取尽可能多的文本。添加 ? 它被改为“懒惰”,以捕获最少的必要性。

例如: 将找到“perr”和“o”之间的最长字符串,而 将捕获最小值。

断言和环视

前瞻和后瞻断言允许您在匹配“之前”或“之后”验证条件,而无需消耗文本中的字符。

  • 积极展望: (?=模式) 检查当前位置后是否存在“pattern”。
  • 负面前瞻: (?!图案) 检查下面是否存在“模式”。
  • 正向/负向后视: (?<=模式) y (? 他们“反向”做同样的事情。

正则表达式在现实世界中的实际应用

正则表达式广泛应用于各种领域和日常任务:

  • 表单验证:电子邮件、电话号码、姓名、强密码。
  • 日志处理和系统审计:在日志文件中搜索模式,提取错误和警告。
  • SEO和URL管理:.htaccess 中的 URL 重写、参数过滤器、搜索分段。
  • 批量文本编辑:清理 HTML 标签、删除冗余空格、规范电子表格中的数据、调整遗留代码。
  • Web 开发和自动化:自动化测试、服务器规则配置、抓取工具开发。

不同的正则表达式风格和引擎

并非所有的 Regex 实现都支持相同的功能;根据所使用的语言、工具或引擎,存在不同的“风格”。

  • POSIX: 基于 UNIX 的原始语法。不如 Perl 或 PCRE 广泛。
  • Perl/PCRE: 非常完整,它们支持环视、高级引用、修改器和子程序。
  • JavaScript的: 在网络上广泛使用,与大多数运算符兼容,但在后视方面存在限制(现代版本除外)。
  • .NET 和其他语言: 它们通常与 PCRE 兼容,但始终建议查阅该语言自己的文档。

因此,无论何时您要在特定环境中工作,请检查 Regex 在该工具或语言中接受什么支持和语法。

如何测试和构建自己的正则表达式模式

学习正则表达式的最佳方法是通过示例练习并使用网络上提供的实时测试工具。

  • 正则表达式101.com:允许您编写模式、检查结果、查看解释和性能统计数据。
  • regexr.com::出色的分步帮助选项、可视化图形和交互式示例。
  • 可视化解释器和代码生成器:非常适合理解复杂模式并从头开始生成表达式。
  • 在线游戏和练习:通过游戏来学习并解决真正的挑战,以内化正则表达式的工作原理。

常见错误和掌握 Regex 的实用技巧

正则表达式功能强大,但也可能令人困惑。以下技巧可以帮助您避免常见的陷阱:

  • 转义元字符 搜索其字面值时。例如,使用 \. 就这一点而言, \* 对于星号, \? 接受审讯。
  • 不要过度使用句点 (.) 和通配符 .*。 它们非常有用,但如果您没有很好地定义模式,它们可能会返回不必要的结果。
  • 当您想要将模式限制在一行的开头或结尾时,添加锚点(^,$) 并避免部分匹配。
  • 使用特定的量词 在搜索精确重复时,而不是仅仅依靠 * 或 +。
  • 总是尝试用正面和反面的例子。 这样,您就可以检测模式是否涵盖所有必要的情况,而不会产生误报。
  • 分而治之: 如果您有一个非常复杂的模式,请将其分成几部分构建,最后将各个片段组合起来。
  • 请随意查看备忘单、文档和论坛。 查看示例和日常技巧。

将 Regex 集成到编程语言和工具中

正则表达式已集成到所有主流语言的最常用函数中。以下是一些示例:

  • JavaScript的: 方法 测试(), exec() RegExp 对象及其方法 比赛(), 搜索(), 代替 (), 分裂() 的字符串。
  • Python: 模块 re 提供以下功能 搜索(), 比赛(), 找到所有(), 子()等等。
  • PHP: 功能 预匹配(), preg_replace(), preg_split() 和其他人
  • .NET:正则表达式 采用先进的方法和 PCRE 支持。

在编辑器中 VSCode、Sublime、Atom 或 Notepad++,您还可以使用正则表达式进行搜索和替换。在 UNIX 系统上,可以使用以下实用程序 grep的, 口渴 y AWK 结合他们自己的正则表达式引擎。

SEO 和 URL 管理中的正则表达式

Regex 是 WordPress、Joomla 和电子商务等平台上的 URL 优化、Web 路由和动态参数管理的关键组件。

  • .htaccess 和 mod_rewrite: 它们允许你使用正则表达式规则将丑陋的、充满参数的 URL 转换为友好的地址。这样, www.ejemplo.com/index.php?p=123 可以转化为 www.ejemplo.com/articulo/titulo-amigable,这既提高了 SEO,也提高了用户体验。
  • 参数过滤: 提取、清理或转换 URL 中的参数,以使结果适应不同的搜索环境。

使用正则表达式规则,网站管理员可以创建重写模式来识别和修改 URL 组件,以改善结构、优化以及搜索引擎和用户的理解。

高级正则表达式:技术和资源

正则表达式不仅支持直接搜索,还支持条件分组、子程序、递归、反向引用等等。这使得它成为完成复杂任务的必备工具。

  • 子例程和反向引用: 它们允许您找到重复的模式、对称性、序列和非常具体的验证。
  • 有条件的: 根据先前组中捕获的内容运行不同的搜索或验证。
  • 递归: 一些高级引擎允许您定义适用于自身的模式,这在处理 XML 或 JSON 等结构化数据时非常有用。
  • 全局修饰符: (Perl/JavaScript 中的 /g、/i、/m)允许全局、不区分大小写或多行搜索。

学习正则表达式的必备资源

如果您想扩展自己的知识,这些资源将会很有用:

  • 维基百科: 详细的理论和技术解释。
  • Regular-Expressions.info: 适合各个级别的参考和教程。
  • 备忘单: 所有最常见的运算符、组和规则的快速摘要。
  • 互动教程: 通过练习直接练习并立即获得反馈。
  • 社区和论坛: 向其他用户学习、提出问题并分享您的个人技巧。

学习正则表达式在文本管理和处理方面具有很大的优势,可以实现更高效的搜索、验证、转换和自动化。 通过一致性和实践,编写正则表达式模式变得更容易、更自然。 利用在线工具和实践练习,从简单示例入手,逐步深入到更复杂的模式。一旦掌握了正则表达式的原理,它将成为您开发和系统管理工具库中的自然补充,帮助您轻松完成那些之前看似复杂或乏味的任务。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:Actualidad Blog
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。