学习正则表达式的简单方法

什么是正则表达式?

正则表达式是一组字符或符号,用于从文本中查找特定的模式。

正则表达式是从左到右匹配主题字符串的模式。“正则表达式”这个词很拗口,通常缩写为“regex”或“regexp”。正则表达式用于替换字符串中的文本、验证表单、根据模式匹配从字符串中提取子字符串等等。

假设你正在编写一个应用程序,并希望设置用户选择用户名的规则。我们希望允许用户名包含字母、数字、下划线和连字符。我们还希望你限制用户名中的字符数,这样看起来就不会太难看。我们使用下面的正则表达式来验证用户名:

学习正则表达式的简单方法_第1张图片

上面的正则表达式可以接受字符串john_doe、jo-hn_doe和john12_as。它不匹配Jo,因为该字符串包含大写字母,而且太短。

目录

  • 基本匹配器
  • 元字符
    • 句号
    • 字符集
    • 否定字符集
    • 重复次数
    • 加号
    • 问号
    • 大括号
    • 角色组
    • 轮换
    • 转义特殊字符
    • 锚点
    • 插入符号
    • 美元
  • 速记字符集
  • 看看周围
    • 积极向前
    • 负前瞻
    • 正向后看
    • 负向后看
  • 标志
    • 不区分大小写
    • 全球搜寻
    • 多行
  • 奖金

1.基本匹配器

正则表达式只是我们用于在文本中执行搜索的字符模式。例如,正则表达式
the表示:字母t,后跟字母h,后跟字母e

"the" => The fat cat sat on the mat.

测试正则表达式

正则表达式123匹配字符串123。通过逐个比较正则表达式中的每个字符和输入字符串中的每个字符,可以对输入字符串匹配正则表达式。正则表达式通常区分大小写,因此正则表达式不会与字符串匹配。

"The" => The fat cat sat on the mat.

测试正则表达式

2.元字符

元字符是正则表达式的基础。元字符不代表自己,而是以某些特殊方式解释。一些元字符具有特殊含义,并写在方括号内。
元字符如下:

元字符 描述
句点匹配除换行符以外的任何单个字符。
[] 角色类。匹配方括号之间包含的任何字符。
[^] 否定的角色类。匹配方括号之间不包含的任何字符
* 匹配0个或多个前一个符号的重复。
+ 匹配前一个符号的1个或多个重复。
使前面的符号为可选。
{n,m} 大括号。至少匹配前一个符号的“ n”个但不超过“ m”个重复。
(xyz) 字符组。以完全相同的顺序匹配字符xyz。
| 交替。匹配符号之前或之后的字符。
\ 转义下一个字符。这使您可以匹配保留字符 { } . * + ? ^ $ \ |
^ 匹配输入的开头。
$ 匹配输入的结尾。

2.1句号

句号.是元字符的最简单示例。元字符.与任何单个字符匹配。它将不匹配返回或换行符。例如,正则表达式的.ar意思是:任何字符,后跟字母a,后跟字母r

".ar" => The car parked in the garage.

2.2字符集

字符集也称为字符类。方括号用于指定字符集。在字符集中使用连字符指定字符的范围。方括号内字符范围的顺序无关紧要。例如,正则表达式[Tt]he表示:大写T或小写t,后跟字母h,后跟字母e

"[Tt]he" => The car parked in the garage.

测试正则表达式

但是,字符集内的句点表示原义句点。正则表达式的ar[.]意思是:小写字符a,后跟letter r,后跟句点.字符。

"ar[.]" => A garage is a good place to park a car.

测试正则表达式

2.2.1否定字符集

通常,脱字符号表示字符串的开头,但是在方括号中键入时,它会否定
字符集。例如,正则表达式的[^c]ar意思是:除之外的任何字符c,其后是该字符a,然后
是字母r

"[^c]ar" => The car parked in the garage.

测试正则表达式

2.3重复

在元字符之后+*?用于指定子模式可以出现多少次。这些元字符在不同情况下的行为不同。

2.3.1星星

该符号*与前面的匹配项的零个或多个重复匹配。正则表达式的a*意思是:零个或多个前面小写字符的重复a。但是,如果它出现在字符集或类之后,则它将找到整个字符集的重复。例如,正则表达式的[a-z]*意思是:连续任意数量的小写字母。

"[a-z]*" => The car parked in the garage #21.

测试正则表达式

*符号可与元字符.一起使用,以匹配任何字符串.*。该*符号可与空白字符\s一起使用,以匹配一串空白字符。例如,该表达式的\s*cat\s*意思是:零个或多个空格,后跟小写字符c,其次是小写字符a,然后是小写字符t,然后是零个或多个空格。

"\s*cat\s*" => The fat cat sat on the concatenation.

测试正则表达式

2.3.2加号

该符号+与前一个字符的一个或多个重复匹配。例如,正则表达式的c.+t意思是:小写字母c,后跟至少一个字符,后跟小写字符t。需要澄清的t是,这是t句子中的最后一个。

"c.+t" => The fat cat sat on the mat.

测试正则表达式

2.3.3问号

在正则表达式中,元字符?使前面的字符成为可选字符。该符号与前一个字符的零个或一个实例匹配。例如,正则表达式的[T]?he意思是:可选的大写字母T,后跟小写字符h,再跟小写字符e

"[T]he" => The car is parked in the garage.

测试正则表达式

"[T]?he" => The car is parked in the garage.

测试正则表达式

2.4大括号

在正则表达式中,花括号(也称为量词)用于指定一个字符或一组字符可以重复的次数。例如,正则表达式的[0-9]{2,3}意思是:匹配至少2位但不超过3位(0到9之间的字符)。

"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.

测试正则表达式

我们可以省略第二个数字。例如,正则表达式[0-9]{2,}表示:匹配2个或更多数字。如果我们也删除逗号,则正则表达式[0-9]{3}表示:精确匹配3位数字。

"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.

测试正则表达式

"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.

测试正则表达式

2.5字符组

字符组是写在括号内的一组子模式(...)。正如我们之前在正则表达式中讨论的那样,如果我们在一个字符之后放置一个量词,那么它将重复前面的字符。但是,如果我们将量词放在一个字符组之后,那么它将重复整个字符组。例如,正则表达式(ab)*匹配字符“ ab”的零个或多个重复。我们还可以|在字符组中使用替代元字符。例如,正则表达式(c|g|p)ar的装置:小写字符cgp,随后的字符a,随后的字符r

"(c|g|p)ar" => The car is parked in the garage.

测试正则表达式

2.6交替

在正则表达式中,竖线|用于定义交替。交替就像多个表达式之间的条件。现在,你可能会认为字符集和替换的工作方式相同。但是字符集和替换之间的最大区别是,字符集在字符级别上起作用,而替换在表达式级别上起作用。例如,正则表达式(T|t)he|car意思是:大写字母T或小写字母t,其次是小写字母h,然后是小写字母e或小写字母c,接着是小写字母a,再是小写字母r

"(T|t)he|car" => The car is parked in the garage.

测试正则表达式

2.7转义特殊字符

\正则表达式中使用反斜杠来转义下一个字符。这允许将符号指定为包含保留字符的匹配字符{ } [ ] / \ + * . $ ^ | ?。要将特殊字符用作匹配字符放在前面\。例如,正则表达式.用于匹配除换行符以外的任何字符。现在,以匹配.在一个输入字符串的正则表达式(f|c|m)at\.?的装置:小写字母fc或者m,随后小写字符a,接着小写字母t,接着可选.字符。

"(f|c|m)at\.?" => The fat cat sat on the mat.

测试正则表达式

2.8下锚

在正则表达式中,我们使用锚点来检查匹配的符号是输入字符串的开始符号还是结束符号。锚有两种类型:第一种类型是Caret ^,它检查匹配的字符是否是输入的起始字符,第二种类型是Dollar $,它检查匹配的字符是否是输入字符串的最后一个字符。

2.8.1插入符号

插入^符号用于检查匹配字符是否为输入字符串的第一个字符。如果我们将以下正则表达式^a(如果a是起始符号)应用于输入字符串,abc则它匹配a。但是,如果我们^b在上述输入字符串上应用正则表达式,则它不匹配任何内容。因为在输入字符串中,abc“ b”不是起始符号。让我们看一下另一个正则表达式^(T|t)he,它表示:大写字符T或小写字符t是输入字符串的开始符号,其后是小写字符h,再是小写字符e

"(T|t)he" => The car is parked in the garage.

测试正则表达式

"^(T|t)he" => The car is parked in the garage.

测试正则表达式

2.8.2美元

美元$符号用于检查匹配字符是否为输入字符串的最后一个字符。例如,正则表达式(at\.)$表示:小写字符a,后跟小写字符t,后跟一个.字符,匹配器必须在字符串的结尾。

"(at\.)" => The fat cat. sat. on the mat.

测试正则表达式

"(at\.)$" => The fat cat. sat. on the mat.

测试正则表达式

3.速记字符集

正则表达式为常用字符集提供了快捷方式,而后者为常用正则表达式提供了方便的快捷方式。速记字符集如下:

速记 描述
除换行外的任何字符
\ w 匹配字母数字字符: [a-zA-Z0-9_]
\ W 匹配非字母数字字符: [^\w]
\ d 匹配数字: [0-9]
\ D 匹配非数字: [^\d]
\ s 匹配空白字符: [\t\n\f\r\p{Z}]
\ S 匹配非空格字符: [^\s]

4.环顾四周

后向和前向有时称为环视,是非捕获组的特定类型(用于匹配模式,但不包括在匹配列表中)。当我们具有该模式在另一个特定
模式之前或之后的条件时,将使用前行。例如,我们$要从下面的输入字符串中获取所有以字符开头的数字$4.44 and $10.88。我们将使用以下正则表达式(?<=\$)[0-9\.]*,这意味着:获取所有包含.字符并以$字符开头的数字。以下是在正则表达式中使用的环顾:

符号 描述
?= 积极向前
?! 负前瞻
?<= 正向后看
?<! 负向后看

4.1积极向前

正向超前断言,表达式的第一部分必须后跟超前表达式。返回的匹配项仅包含与表达式的第一部分匹配的文本。为了定义正向,使用括号。在这些括号内,使用等号问号,如下所示:(?=...)。先行表达式写在括号内的等号之后。例如,正则表达式的[T|t]he(?=\sfat)意思是:可选地匹配小写字母t或大写字母T,后跟字母h,再跟字母e。在括号中,我们定义了正向前行,它告诉正则表达式引擎匹配Thethe后面跟有单词fat

"[T|t]he(?=\sfat)" => The fat cat sat on the mat.

测试正则表达式

4.2否定顺序环视

当我们需要从输入字符串中获取没有模式跟随的所有匹配项时,可以使用Negative lookahead。与我们定义积极前向一样,唯一的区别是我们使用了否定词代替=字符!性格即(? !…)。让我们看一下下面的正则表达式[T| T]he(?!\sfat),它的意思是:从输入字符串中获取所有没有在单词fat后面加上空格字符的单词。

"[T|t]he(?!\sfat)" => The fat cat sat on the mat.

测试正则表达式

4.3正向后看

正向后查找用于获取特定模式之前的所有匹配项。积极的后向表示
(? < =…)。例如,正则表达式(?<=[T| T]he\s)(fat|mat)表示:从单词the或the后面的输入字符串中获取所有fat或mat单词。

"(?<=[T|t]he\s)(fat|mat)" => The fat cat sat on the mat.

测试正则表达式

4.4否定逆序环视

Negative lookbehind用于获取没有特定模式的所有匹配项。负后向表示(? < !……)。例如,正则表达式(?

"(? The cat sat on cat.

测试正则表达式

5.标志

标志也称为修饰符,因为它们会修改正则表达式的输出。这些标志可以以任何顺序或组合使用,并且是RegExp的组成部分。

描述
一世 不区分大小写:将匹配设置为不区分大小写。
G 全局搜索:在整个输入字符串中搜索模式。
多行:锚元字符在每行上起作用。

5.1不区分大小写

所述i改性剂被用于执行不区分大小写匹配。例如,正则表达式的/The/gi意思是:大写字母T,后跟小写字符h,后跟character e。并且在正则表达式的末尾,该i标志告诉正则表达式引擎忽略大小写。如您所见,我们还提供了gflag,因为我们想在整个输入字符串中搜索模式。

"The" => The fat cat sat on the mat.

测试正则表达式

"/The/gi" => The fat cat sat on the mat.

测试正则表达式

5.2全局搜索

g修改器用于执行全局匹配(查找所有的比赛,而不是第一场比赛后停止)。例如,正则表达式/.(at)/g表示:除换行符外的任何字符,后跟小写字符a,再跟小写字符t。因为我们g现在在正则表达式的末尾提供了flag,所以它将从整个输入字符串中查找所有匹配项。

"/.(at)/" => The fat cat sat on the mat.

测试正则表达式

"/.(at)/g" => The fat cat sat on the mat.

测试正则表达式

5.3多行

所述m改性剂被用于执行多线的匹配。正如我们前面讨论的,锚点(^, $)用于检查pattern是输入的开始还是输入字符串的结尾。但是,如果我们希望锚在每一行上都起作用,则可以使用mflag。例如,正则表达式的/at(.)?$/gm意思是:小写字符a,后跟小写字符t,除了换行符以外的其他任意内容。而且由于m有了标志,正则表达式引擎现在在字符串的每一行末尾匹配模式。

"/.at(.)?$/" => The fat
                cat sat
                on the mat.

测试正则表达式

"/.at(.)?$/gm" => The fat
                  cat sat
                  on the mat.

测试正则表达式

原文链接:https://dev.to//ziishaned/learn-regex-the-easy-way-c4g

你可能感兴趣的:(regex)