10 RegEx 测试器适用于 JavaScript、Python、PHP、Golang、Ruby 等等。
正则表达式有时候可能会很难。好吧,有时候是这样的!
让我们来了解一下正则表达式及其模式。我们将研究那些看起来像是一堆复杂字符的模式。我们将了解正则表达式中每个字符的含义。
阅读完本文后,你将能够创建自己的正则表达式并按自己的喜好使用它们。最后,我们还将列出一些在线的正则表达式测试工具,这样根据需求你就可以创建自己的正则表达式并使用这些工具进行测试。
简介
正则表达式,或者通常称为 regex,是可以用作搜索字符或字符串的模式的任意字符序列。
例如,要确定一个字符串或短语中是否包含单词“apple”,我们可以使用正则表达式“/apple”在字符串中搜索。再举一个例子,我们可以使用“/[0-9]
”来检查给定字符串中是否包含0到9之间的数字。
正则表达式及其用途
正则表达式在现代与web相关的操作中被广泛用于各种目的。web表单验证、web搜索引擎、ide(集成开发环境)中的词法分析器、文本编辑器和文档编辑器等都是正则表达式经常使用的一些例子。
我们都曾经多次使用“ctrl + f
”在文档或代码中搜索以找到特定的单词、短语或表达式。这个操作可以被认为是正则表达式使用的一个非常常见的例子。
在继续之前,让我们先来看一个非常常用的正则表达式。
你能猜到下面的正则表达式用于什么吗?🤔
^([a-za-z0-9_-.]+)@([a-za-z0-9_-.]+).([a-za-z]{2,5})$
如果你猜不到,不用担心。我敢肯定在本文结束时你一定能猜到。
首先,让我们从正则表达式的 a、b、c 开始。
标记
首先,让我们看一下上面显示的正则表达式中的各种符号。
^([a-za-z0-9_-.]+)@([a-za-z0-9_-.]+).([a-za-z]{2,5})$
如果我们看一下上面给出的正则表达式,我们可以看到它由许多符号或字符或标记组成。让我们找出它们的含义:
token |
meaning |
^ |
这个标记表示字符串的开始。 |
(…) |
这表示一个组,其中(…)中给出的所有内容都被捕获。 |
[…] |
[]括起来的字符中的任何一个都可以匹配。例如 – [abc]将匹配a或b或c。 |
a-z |
小写字母a到z的集合。我们必须记住,正则表达式区分大小写。 |
a-z |
大写字母a到z的集合。 |
0-9 |
数字0到9。 |
_ |
这将匹配字符_。 |
|
这是转义字符。 |
. |
这个字符匹配“.”本身。这是因为正则表达式中的符号“.”本身是一个标记,它匹配任何字符 |
+ |
这是一个量词。与它一起使用时,它匹配一个或多个字符。例如,a+表示字符a的一个或多个出现。 |
– |
这将匹配字符“-”。 |
@ |
这将匹配字符“@”。 |
{} |
这是另一个量词。它用于表示字符的出现次数。例如,a{3}表示确切地三个a。 |
$ |
这表示字符串的结束。 |
给定的正则表达式模式的解析
现在,有了这些基础的标记知识,让我们试着解析上面的正则表达式:
^([a-za-z0-9_-.]+)
表示我们正在寻找以至少一个或多个大写或小写字母数字字符、下划线、连字符或点开始的字符串。例如,类似于 user_name.01 的任何内容都将匹配该模式。我们必须记住,在这里不需要包含所有符号,只需在[a-za-z0-9_-.]
中包含任何一个字符即可。- 字符@匹配单个 @ 的出现。在前面的例子中,类似于 user_name.01@ 的内容将匹配。
([a-za-z0-9_-.]+)
与第一点类似。它也表示我们正在寻找包含至少一个或多个字母数字字符、下划线、连字符或点的字符串。在这个例子中,user_name.01@gmail 将匹配此模式。- 正如你可能已经猜到的那样,我们在暗示电子邮件模式。接下来,. 匹配单个“.”字符。如果我们继续使用正在进行的示例,类似于 user_name.01@gmail. 的内容。
([a-za-z]{2,5})$
这意味着字符串应以2到5个字母字符(大写或小写)结尾。如果我们将 .com 添加到前面的示例中,我们可以得到[email protected],这是电子邮件字符串的常见模式。
将所有这些结合起来,我们可以看到我们正在搜索电子邮件id字符串。现在我们可以使用此表达式来验证任何电子邮件id。如果我们的测试电子邮件id与此模式匹配,我们可以说它是一个有效的电子邮件id。
p.s。 – 这是大多数网络上常见电子邮件id的模式。
令牌类型
在正则表达式中,许多令牌可以以各种组合使用,以描述各种表达式。下面我们将看一下正则表达式中使用的各种类型的令牌。此外,我们还将看一下每个类别中最常用的令牌。
基本令牌
让我们从基本令牌开始。这些令牌几乎与每个正则表达式一起使用。因此,我们必须首先了解它们。
令牌 |
含义 |
r |
这匹配回车符。 |
|
它匹配空字符。 |
n |
这是寻找换行符。 |
t |
这匹配制表符。 |
字符类
接下来,让我们看一下字符令牌。它们用于匹配字母、数字和其他特殊字符。
令牌 |
意义 |
a |
这直接匹配字符a。类似地,所有的字母和数字在单独使用时,都只匹配特定的字符本身。 |
abc |
它匹配字符串abc。 |
[abc] |
这寻找a、b或c中的一个字符。 |
[^abc] |
这匹配任何除了a、b或c之外的字符。 |
[a-z] |
小写字母从a到z的范围内的字符 |
[^a-z] |
任何不在a到z范围内的字符。这包括大写字母。 |
[a-z] |
大写字母a到z之间的字符。 |
[^a-z] |
不在a到z之间的字符。 |
[0-9] |
范围在0到9之间的任何数字 |
[^0-9] |
不在0到9范围内的字符 |
[a-za-z0-9] |
这匹配一个字符,可以是小写字母a到z之间的字符,或者大写字母a到z之间的字符,或者数字0到9之间的字符 |
[^a-za-z0-9] |
任何不属于上述类别的字符。 |
. |
任何单个字符 |
s |
这用于寻找任何空白字符。 |
s |
这用于寻找任何非空白字符。 |
d |
这匹配任何数字 |
d |
这匹配任何非数字字符 |
w |
它匹配任何单词字符 |
w |
它匹配任何非单词字符 |
$ |
这表示字符串的结尾 |
b |
这匹配一个单词边界 |
b |
这用于匹配一个非单词边界 |
量词
这个特殊类的标记用于匹配连续出现的字符、字符串或数字的次数。它们与其他标记一起使用。
让我们看一些常见的量词。
标记 |
意义 |
a? |
这匹配零次或一次的a。 |
a* |
这匹配零次或多次(连续)的a。 |
a+ |
这匹配至少一次或多次连续的a。 |
a{5} |
这查找正好连续出现五次的字母a。 |
a{5, } |
这匹配至少连续出现五次或更多次的a。 |
a{5, 7} |
这查找在5和7之间连续出现的任意数量的a。 |
组
这些标记将按照组匹配,如其名称所示。
标记 |
意义 |
(…) |
这捕获括号内的所有内容。 |
(a|b) |
这匹配a或b。 |
(?:…) |
匹配方括号内的所有内容 |
(?(1)yes|no) |
这匹配一个条件语句。 |
标志
这些是在搜索匹配项时向模式匹配引擎提供的特殊指令。
标记 | 意义 |
g |
全局匹配。这将一直搜索,直到匹配引擎找不到更多匹配项,即到达给定字符串或字符串组的末尾。 |
m |
多行匹配,即逐行匹配。 |
x |
告诉引擎在匹配时忽略空格。 |
x |
用于扩展匹配。 |
s |
匹配单行。 |
i |
用于大小写不敏感匹配。 |
u |
用于unicode字符。 |
锚点
关于位置的引擎的附加指令。
标记 |
意义 |
^ |
这表示字符串的开始 |
a |
这也表示字符串的开始 |
z |
字符串的结束标记。 |
z |
字符串的绝对结束标记。 |
g |
用于匹配的开始。 |
常用的正则表达式
正则表达式在互联网上被广泛使用。从表单验证到查找包含特定关键字或关键字的数据,正则表达式几乎与现代计算应用程序密不可分。
让我们来看一些常见的正则表达式的用法。
匹配手机号码
让我们看一下印度手机号码的模式。国家代码首先出现。它通常包含一个“+”字符,后面跟着数字91,这是印度的国家代码。此外,印度的手机号码通常以6、7、8或9开头。然后是9个其他数字。
所以一个有效的印度手机号码的正则表达式如下。
^(+91[-s]?)?[0]?(91)?[6-9]d{9}$
测试密码的强度
大多数网站建议我们提供一个强密码,其中包含数字、大写和小写字符以及符号的组合。此外,密码必须有一定的最小字符数 – 6或8。这样做是为了使密码变得非常难以破解。
符合这个规则的任何密码都可以使用正则表达式生成或验证密码强度。
^(((?=.*[a-z])(?=.*[a-z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9])))(?=.{6,})
url匹配
url是使用互联网和快速访问所需网页的最常见方式。几乎每个网站都有一个url。因此,每个url都是标准化的,并遵循一定的模式。每个url要么遵循http协议,要么遵循https协议,后面跟着“://”和常常是“www”。然后是网站的名称,后面是.com或.net或.org等。
为了测试url的有效性,我们可以使用以下正则表达式。
https?://(www.)?[-a-za-z0-9@:%._+~#=]{1,256}.[a-za-z0-9()]{1,6}b([-a-za-z0-9()@:%_+.~#?&//=]*)
日期和时间格式
日期和时间格式也是在web上非常常用的。有许多日期格式由各种应用程序、软件或系统使用。日期应始终以使用户或尝试读取日期的应用程序可用的格式使用。
可以使用以下正则表达式验证格式为dd-mm-yyyy的日期。
^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$
现在,让我们探索一些可以帮助构建和排除故障的在线正则表达式工具。
如果你想了解更多关于正则表达式、示例和高级用法的内容,以下是一些你可以随时参考的网站:
regex101
regex101是一个优秀的参考指南和交互式工具,用于创建正则表达式,它可以帮助您快速入门正则表达式。
使用这个工具,我们可以为以下语言测试正则表达式。
- pcre (php)
- ecmascript (javascript)
- python
- golang
它提供了对正则表达式功能的支持,如匹配、替换和单元测试。除此之外,你还可以保存已测试过的正则表达式。
freeformatter
freeformatter是基于javascript的,在增强功能上使用xregexp库。它可用于对正则表达式进行匹配和替换的测试。它支持以下标志,可以根据测试正则表达式时的要求使用。
- i – 不区分大小写
- m – 多行
- g – 全局(不仅匹配第一个)
- s – 点匹配包括换行符(仅限xregexp)。
regex crossword
如果你对正则表达式和拼图感兴趣,那么这个网站是你去的地方。它有一系列有趣和交互式的拼图。它们肯定会帮助您更多地了解正则表达式。
- 为手机优化,随时解决正则表达式谜题。
- 分步教程,教您不同的符号和正则表达式模式。
- 围绕立体的二维回文正则表达式谜题来考验您的思维。
- 从初学者到专家,具有各种难度的正则表达式谜题。
regexr
regexr是一个用于学习正则表达式的网站。您可以编写正则表达式、匹配模式,并在这个代码编辑器中享受所有乐趣,它等同于codepen。
特点
- 支持javascript和php/pcre正则表达式。
- 随着您的输入,结果实时更新。
- 将鼠标悬停在匹配项或表达式上以获取详细信息。
- 使用测试套件验证模式。
- 与他人共享和保存表达式。
- 完整的正则表达式参考,包含帮助和示例。
pythex
它是一个基于python的正则表达式测试工具。 pythex是一种快速测试python正则表达式的方法。它提供了四个标志,分别是
- 忽略大小写
- 多行模式
- 任意字符模式
- 冗长模式
rubular
rubular是一个基于ruby的正则表达式编辑器。它支持并使用ruby 2.5.7版本及以上。
debuggex
它是基于javascript的工具,支持python和perl兼容的正则表达式(pcre)。使用这个在线工具,我们可以将我们的正则表达式嵌入到stackoverflow中。它提供了通过为每个正则表达式测试创建一个唯一链接来分享正则表达式结果的功能。
extendsclass
extendsclass是开发人员的工具箱。它为以下语言提供正则表达式测试支持。
- javascript
- python (3.4)
- ruby (2.1)
- java (jdk 14)
- php (7)
regex tester
这个免费的正则表达式测试工具可以让您针对任何输入测试您的正则表达式,并清晰地突出显示所有匹配项。使用它,我们可以保存旧的测试过的正则表达式以供将来参考。此外,它支持javascript和pcre正则表达式。
web toolkit
web toolkit包含一组实用工具,其中包括正则表达式测试工具。我们可以在这里输入我们的正则表达式,并对其进行测试。它还提供了替换、匹配和复制表达式的功能。除此之外,它还提供了一个切换来进行区分大小写和全局匹配。
学习资源
如果您希望学习正则表达式,以下是一些在线课程。
coursera
coursera提供有趣的指导项目课程,可以让您亲自实践使用正则表达式。这些项目课程大多持续一个小时,您将与讲师一起逐步进行工作。以下是一些最好的正则表达式项目。
udemy
udemy提供了一个适合初学者的完整正则表达式课程,在3.5小时内教授基础知识,以及一个带有项目的python正则表达式课程,让您亲自实践使用正则表达式进行输入验证、数据处理和转换。
结论
我们学习了正则表达式,一些常见的例子,以及一些在线测试工具。有了这些知识,我们可以创建自己的正则表达式并在应用程序中使用它们。