百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

正则表达式教程实例速查

toyiye 2024-06-21 12:37 10 浏览 0 评论

本文为 AI 研习社编译的技术博客,原标题 :

Regex tutorial — A quick cheatsheet by examples

翻译 | kerr、狒狒 校对 | 就2 整理 | 就2

原文链接:

https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285

正则表达式(regex 或 regexp)在文本信息提取方面是非常有用的工具,通过查询一个或多个特定搜索模式的匹配实现(例如,特定的ASCII或unicode字符序列)。

正则表达式的应用领域包括字符串语义分析/替换,到数据格式转换,以及网页抓取等。

最有趣的一点是,只要学过正则表达式的语法,在目前几乎所有编程语言中都可以应用正则表达式(JavaScript、Java、VB、C/C++、C#、Python、Perl、Ruby、Delphi、R、Tcl、以及其他很多语言),这些语言对一些高级功能和语法的支持只有细微的区别。

下面通过一些示例和解释来了解正则表达式。

Basic topics

Anchors — ^ and $

^The matches any string that starts with The -> Try it!end$ matches a string that ends with end

^The end$ exact string match (starts and ends with The end)

roar matches any string that has the text roar in it

数量词 —* + ? and{}

abc*

匹配ab后有零个或多个为c的字符串

abc+

匹配ab后有一个或多个为c的字符串

abc?

匹配ab后有零个或一个为c的字符串

abc{2}

匹配ab后有2个 c的字符串

abc{2,}

匹配ab后有2个 c或更多个c的字符串

abc{2,5}

匹配ab后跟2到5个c的字符串

a(bc)*

匹配a后面跟零个或多个重复的bc序列的字符串

a(bc){2,5}

匹配a后面跟2个到5个重复的bc序列的字符串

或运算符——|或

a(b|c)

匹配a后跟b或c的字符串 - >试试吧!

a[bc]

同上一情况

字符类——\d \w \s和.

\d

匹配一个数字字符 - >试试吧!

\w

匹配单词字符(字母、数字或下划线) - >试试吧!

\s

匹配空白字符(包括制表符和换行符)

.

匹配任意字符 - >试试吧!

谨慎使用“.” 运算符,因为通常类或反义字符类(我们将在下面介绍)会更快更精确。

\ d,\ w和\ s也分别用\ D,\ W和\ S表示它们的否定。

例如,\ D将执行与\ d获得的相反匹配。

\D

匹配一个非数字字符 - >试试吧!

为了按字面意思理解,你必须使用反斜杠“\”来转义字符^.[$|*+?{\,因为它们具有特殊含义。

\$\d

匹配一个数字前面有一个$的字符串 - >试试吧!

请注意,您还可以匹配不可打印的字符,如制表符\ t,换行符\ n,回车符\ r。

标志位

基础部分中,如何构建一个正则表达式还有一个基本概念:标志。

正则表达式通常以这种形式/abc /出现,其中搜索模式由两个斜杠字符/分隔。

我们可以指定一个带有这些值的标志(我们也可以将它们相互组合):

  • g(全局)在第一次匹配后不返回,从上一次匹配结束时重新开始后续搜索

  • m(多行)启用时,^和$将匹配这行的开头和结尾,而不是整个字符串。

  • i(不敏感)使整个表达式不区分大小写(例如/ aBc / i将匹配AbC)。

中心主题

分组和捕获——

a(bc)

括号创建一个值为bc的捕获组 - >试试吧!

a(?:bc)*

我们使用?:禁用捕获组 - >试试吧!

a(?

我们使用?

当我们需要使用您首选的编程语言从字符串或数据中提取信息时,此运算符非常有用。由几个组捕获的任何多次出现都将以经典数组的形式公开:我们将使用匹配结果的索引来访问它们的值。

如果我们选择为组添加名称(使用(?

括号表达式——

[abc]

匹配一个具有a或b或c的字符串 - >与a | b | c相同 - >试试吧!

[a-c]

同上一情况

[a-fA-F0-9]

表示一个十六进制数字的字符串,不区分大小写 - >试试吧!

[0-9]%

在%符号之前具有0到9之间字符的字符串

[^a-zA-Z]

一个没有字母从A到Z或从A到Z.的字符串,在这种情况下,^被用作表达式的否定->尝试它!

请记住,在括号内的表达式中,所有特殊字符(包括反斜杠\)都会失去其特殊权力:因此我们不会应用“转义规则”。

贪婪与惰性匹配

量词(* + {} )是贪婪的运算符,因此它们通过提供的文本尽可能地扩展匹配。

例如,

simple div

test中的

simple div

为了只捕获div标签,我们可以使用? 让它变得懒惰:

匹配内包含的任何一个或多个字符,根据需要进行扩展 - >试试吧!

请注意,更好的解决方案应该避免使用.来支持更严格的正则表达式:

]+>

匹配中包含的一次或多次除以外的任何字符 - >试试吧!

高级主题

边界— \b and \B

\babc\b

执行“仅限整个单词”搜索 - >尝试一下!

\b表示像插入符号(它类似于$和^)的匹配位置,其中一侧是单词字符(如\w)而另一侧不是单词字符(例如,它可能是字符串的开头或者空格字符)。

它伴随着它的否定,\B。这匹配\b不匹配的所有位置,如果我们想要找到完全被单词字符包围的搜索模式,则可以匹配。

\Babc\B

仅当图案完全被单词字符包围时才匹配 - >试试吧!

回溯引用——\1

([abc])\1

使用\1,它与第一个捕获组匹配的相同文本匹配 - >试试吧!

([abc])([de])\2\1

我们可以使用\ 2(\ 3,\ 4等)来识别与第二个(第三个,第四个等)捕获组匹配的相同文本 - >试试吧!

(?

我们把这个组命名为foo,稍后我们引用它(\ k

先行和后行断言——(?=)和(?

d(?=r)

仅在r之后匹配d,但r将不是整体正则表达式匹配的一部分->试试吧!

(?

仅在r之前匹配d,但r将不是整体正则表达式匹配的一部分->试试吧!

你也可以使用否定运算符!

d(?!r)

仅在不跟随r的情况下匹配d,但r将不是整体正则表达式匹配的一部分->尝试它!

(?

仅在没有r之前匹配d,但r将不是整体正则表达式匹配的一部分->尝试它!

总结

正如您所看到的,正则表达式的应用程序字段可以是多个的,我确信您在开发人员职业生涯中看到的任务中至少识别出这些任务中的一个,这里是一个快速列表:

  • 数据验证(例如检查时间字符串是否格式正确)

  • 数据抓取(特别是网页抓取,最终按特定顺序查找包含特定单词集的所有页面)

  • 数据转换(将数据从“原始”转换为另一种格式)

  • 字符串解析(例如捕获所有URL的GET参数,捕获一组括号内的文本)

  • 字符串替换(即使在使用通用IDE的代码会话期间,例如在相应的JSON对象中转换Java或C#类 - 将“;”替换为“,”将其设为小写,避免类型声明等)

  • 语法高亮,文件重命名,数据包嗅探和许多其他涉及字符串的应用程序(其中数据不必是文本)

如果你喜欢的话,不要忘了推荐这篇文章。

不久我将出版一份包含常见正则表达式列表的新文章,敬请关注!雷锋网雷锋网雷锋网

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码