正则表达式入门

本文是一篇关于正则表达式的入门教程,涵盖了从基本概念到高级特性的讲解,包括匹配数字、特定字符、通配符、字符范围、重复、可选字符、空格处理、开始和结束匹配、分组等知识点,旨在帮助读者快速掌握正则表达式并应用于实际场景。
摘要由CSDN通过智能技术生成

英文原文:https://regexone.com/lesson/introduction_abcs

第一课:绪论

​ 正则表达式在从程序、日志文件、电子表格甚至文本中提取信息时非常有用,虽然在形式语言的背后有很多立论,但是下面的课程和实例将探索正则表法师的更多实际应用,一边能够尽快地使用他们。

​ 使用正则表达式时首先要明白,所有的内容本质上都是字符。我们编写正则开匹配特定的字符序列(也称字符串),大多数模式使用普通的ASCII码。包括字母、数字、标点和键盘上的其他符号(如,%#$@!),但unicode字符也可以用于陪陪任何类型的国际文本。下面是几行文本,请注意当在下面的输入字段中输入时,文本如果更改以突出显示每行中匹配的字符,要继续学习下一章敏需要使用每节课中介绍的新语法和概念来编写和所提供的所有行匹配的模式。

​ 继续并尝试编写一个匹配所有三行的模式。
在这里插入图片描述

第1.5课 数字

​ 字符包括普通的字母,也包括数字。实际上,数字0-9也是字符,如果您查看一个电子表格,他们是按顺序列出的。

​ 在不同的课程中,你将了解在正则表达式中使用的许多特殊元字符,这些元字符可以用于匹配特定类型的字符。在这种情况下,字符\d可以用于代替从0-9的任意数字,前面的斜杠将它与简单的字符d区别开来,表明它是一个元字符。

​ 下面是子涵更包含数字的文本,尝试编写匹配下面字符串中所有数字的模式,并注意你的模式是如何让辟如屁啊字符串中的任何位置的,而不仅仅是从第一个字符开始,我们将在后面的课程中学习如何控制它。

在这里插入图片描述

在这里插入图片描述

第二课 “.”圆点

​ 一些指派游戏中,大王是一个通配符,可以代表排队中任何牌。使用正则表达式,除了他们共享一个共同的模式或结构或结构(比如,电话号码或邮政编码),您经常需要匹配不知道其确切内容的文本片段。

​ 通配符的概念:它由“.”元字符表示,可以匹配任何单个字符(字母、数字、恐吓等),你会注意到,这实际上覆盖了圆点字符的陪陪,因此为了具体的匹配圆点,你可以使用\v来相应地转义该圆点。

​ 下面是两个具有不同字符,范长度相同的字符串,尝试编写一个模式,可以匹配前三个字符串,但不能匹配最后一个字符串,你可能会发现必须对圆点字符进行穿衣,以匹配某些行中的圆点

在这里插入图片描述

解析:这里的"."可以匹配任意是数字、字母、符号,“+”表示;匹配前面的子表达式一次或多次,比如ab+能匹配ab以及abb但不能匹配a;“[^]”表示未包含任意字符

第三课 匹配特定字符

​ 上节课的“.”元字符非常强大,但是有时太强大了,例如,在匹配电话号码是,我们不希望验证字母“(abc) def-ghij”是否是有效数字。

​ 通过在内部定义特定字符,有一种方法可以使用正则表达式匹配特定字符“[]”。例如,模式[abc]将只匹配一个字母a,b或者c,没有其他。

​ 下面有几行代码,我们只需要匹配前三个字符串,而不需要匹配后三个字符串,如果使用点,我们讲无法避免匹配最后三个字符串,但必须使用上面符号明确定义要匹配的字母。

在这里插入图片描述

第四课 不出现特定字符

​ 在某些情况下,我们可能知道有一些特定的字符我们不想匹配,例如我们可能只是想匹配区号650意外的电话号码,为了表示这一点我们使用一个类似的表达式来排除:[^a,b,c],除了字母a,b,c之外,可以匹配任何单个字符。

​ 使用下面的字符串,尝试编写一个只匹配(hog,dog但不匹配bog)的模式。请注意,这种类型的大多数模式也可以使用上节课中的技巧编写,因为他们实际上是同一枚硬币的两面。通过这两种选择,你可以决定在编写自己的模式时哪个更容易编写和理解。

在这里插入图片描述

第五课 字符范围

​ 我们刚刚学习了如何创建匹配或排除特定字符的pattern,但是我们如果想要匹配可以是顺序范围字符的字符怎么办?

​ 在使用方框号表示法时,可以通过使用破折号只是字符范围来匹配序列字符列表中的字符。例如,模式(0-6)值匹配从0-6的任何单个数字字符,其他字符不匹配。同样地,[^n-p]只匹配除字母n-p之外的字符。

​ 除了单个字符之外,还可以在同一组括号中使用多个字符范围,例如字母数字\w元字符,它相当于字符范围 [A-Za-z0-9_],通常用于匹配英文文本中的字符。

​ 在下面的联系中,请注意,所有的字符和跳过行都有一个模式,并使用方括号来匹配或跳过每行中的每个字符,模式是区分大小写的。

在这里插入图片描述

第六课 捕捉zzz……

注意:下面重复语法的某些部分并不是所欲正则表达式都支持的

​ 到目前为止,我们已经学习了如何制定要匹配的字符范围,但是如何确定要匹配的字符重复的数量呢?我们可以做到这一点的一种方法是明确地说出我们要要多少字符,例如,\d\d\d正好匹配三位数。

​ 另一种更方便的方法是使用花括号表示法来制定每一个字符的重负次数,例如a{3}表示将恰好匹配a字符三次。某些正则表达式引擎甚至允许为这种重复制定一个范围,例如,a{1,3}匹配按字符不超过3次不少于1次。

​ 这个量词可以用于任何字符或特殊元字符,利于w{3}(三个w),[wxy]{5}五个w或者x或者y,和.{2,6}表示任意2-6中间的字符。

在这里插入图片描述

第七课 Mr. Kleene, Mr. Kleene

​ 正则表达式中有一个强大的概念是匹配任意数量的字符,例如,你要填一个捐款表单,该字段接收以美元为单位的数值,一个有钱的用户可能想捐25000美元,而一个普通用户可能想捐25美金。

​ 表达这种模式的一种方法是使用*和+,它本质上表示它跟随的0个或多个字符(它总是跟随一个字符和组)。例如,为了匹配上面的捐赠,我们可以使用\d *来匹配任意数量的数字,更研发的张泽表法师应该是\d+,这可以保证输入的字符串至少有一个。

​ 这些两次可以用于任何字符或特殊元字符,利于a+、[abc]+一个或多个a,b或者c和.*零个或者多个任意字符。

在这里插入图片描述

第八课 字符可选

​ 正如上一课看到的,*和+允许我们匹配一行中重复的字符。

​ 匹配和提取文本时另一个常见的两次是?问好,表示可选性的元字符,此元字符允许匹配前一个字符或组中的0个或1个。比如*ab?c*将匹配abc或者ac,因为b被认为是可选的。

​ 与“.”类似,问好是一种特殊字符,当要匹配普通问号时需要转义?。

​ 在下面的字符串中国,请注意单词“file”取决于找到的文件的数量,尝试编写一个模式,使用选项元字符来只匹配找到一个或多个文件的行。

在这里插入图片描述

第九课 空格

​ 在处理真是的输入时,很难不遇到空白。我们使用它来格式化信息片段,使其更容易阅读和指端地扫描,一个空格就可以使最简单的正则表达式变的混乱。

​ 正则表达式中最常见的空格形式是空格和tab键、换行键和回车。这些特殊字符匹配各自的空格。此外,空白特殊字符\s将匹配上面任何特定的空白,在处理源氏输入文本时非常有用。

​ 在下面的字符串中,你讲发现每一行的内容由改行索引中的一些空格缩进(数字也是要匹配的)。尝试写一个模式,可以匹配包含数字和内容之间的空白符的每一行,请注意,空白符和其他字符一样,也可以使用特殊的元字符,如*和+。

在这里插入图片描述

第十课 开始和结束

​ 到目前为止,我们一直在编写正则表达式来匹配文本中的部分片段,有时这不是我们想要的,假设我么想在一个日志文件中匹配单词success,我们当然不希望该模式匹配写"Error: unsuccessful operation"的行,这就是为什么我们进场竟可能地编写特定的正则表达式,以确保我们与现实世界的文本匹配时不会得到误报。

​ 加强我们模式的一种方法是定义一个模式描述的开始喝结束符,开始使用^,结束使用 元 字 符 , 在 上 面 的 实 例 中 , 我 们 可 以 使 用 s u c c e s s 来 匹 配 由 s u c c e s s 开 始 的 行 , 而 不 是 E r r o r : u n s u c c e s s f u l o p e r a t i o n 。 如 果 你 把 和 元字符,在上面的实例中,我们可以使用^success来匹配由success开始的行,而不是Error: unsuccessful operation。如果你把^和 使successsuccessError:unsuccessfuloperation结合起来,你就创造了一个总开始到结束的完整的匹配模式。

​ 主义,这不用于[^...]用于排除字符,这在阅读正则时可能会造成混淆。

​ 尝试使用这些新的特殊字符匹配下面的每个字符串:

在这里插入图片描述

第十一课 分组

​ 正则表达式不仅允许匹配文本,还允许提取信息进行进一步处理。这是通过定义一组字符并使用()元字符来捕获他们来实现的。一对括号内的任何子模式都将作为一个组来捕获,在实践中,这可以用来从各种信息中提取信息,如电话号码或电子邮件。

​ 想象一下,例如,你又一个命令行工具列出所有的图像文件在云端,然后你可以使用一个模式如^(IMG\d+\.png)$来捕获提取完整的文件名,但如果你只是想获取文件名,诶呦扩展名,你可以使用 ^(IMG\d+)\.png$

​ 继续并尝试使用它来编写一个正则表达式,该表达式只匹配PDF文件(不包括扩展名)

在这里插入图片描述

第十二课 嵌套组

​ 在处理复杂数据是,你会很容易发现必须提取多层信息,这导致了嵌套组。通常,捕获组的结果按照定义组的顺序(按括号的顺序)。

​ 以上一节课为例,获取列表中所有图像文件的文件名。如果这些图像文件的文件名中都有一个连续的图片编号,那么你可以通过类似^(IMG(\d+))\.png$这样的表达式,使用相同的模式提取文件名和图片编号,来捕获数字。

​ 嵌套的组在模式中从左到右读取,第一个捕获组是第一个括号组的内容,依次往下。

​ 对于以下字符串,编写一个表达式来匹配和捕获完整日期以及日期的年份。

在这里插入图片描述

第十三课 其他分组

​ 正如在前面课程中看到的,左右两次,包括*和+,重复{m,n}和?问号,都可以在捕获组模式中使用个,这是将两次应用于字符序列而不是单个字符本身的唯一方法。

​ 例如,如果我知道一个电话号码可能包含也可能不包含区号,那么正确的模式是将测试是否存在整租数字(\d{3})?,而不是单个单词本身。

​ 根据使用的正则表达式引擎,你还可以使用非捕获组,它允许你匹配组,但不显示在结果中。

​ 下面是一些不用的常见显示分辨率,尝试捕获每个显示的宽度和高度。

在这里插入图片描述

第十四课 It’s all conditional

​ 正如我们前面提到的,精确总是好的,这是用于编码、会话和任何正则表达式,例如:你不会写一个Buy more .的购物清单,因为你不知道你能得到什么,相反你可以写Buy more milk或者Buy more bread,在正则表达式中,我们可以显式地定义这些条件语句。

​ 特别是在使用组是,你可以用*|*管道来表示不用的可能的字符集。在上面的例子中,我们可以编写模式Buy more (milk|bread|juice)来匹配字符串Buy more milk, Buy more bread, or Buy more juice

​ 与普通组一样,你可以在条件中使用任何字符序列或元字符,例如([cb]ats*|[dh]ogs?)可以匹配猫或蝙蝠,或狗或猪。在许多条件下编写模式可能很难阅读,所以如果太过复杂,应该考虑将它们分开。

​ 继续并尝试编写一个条件模式。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值