新闻动态

行业新闻企业新闻雷火电竞

正则表达式 Regular Expression

雷火电竞

情景引入

改代码

修改代码格式问题,或者重命名代码里的正则某个变量等,都可以使用 VS Code 自带的搜索框中的 RE 。熟练的表达掌握正则表达式,能够帮助程序员以最快的速度写出最优雅的代码。

chatgpt,正则<strong></strong>AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

查找文件

可以使用 ? 和 * 通配符来查找硬盘上的文件,这是简单的通配符。

像 *api 这样的正则模式将查找下列文件:

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天RE 功能更强大,而且更加灵活 。

词法分析器

编译器中的表达词法分析器,会使用 RE 去匹配代码中的关键字。

chatgpt,正则AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

网站注册密码

网站上的注册表单会用到 RE 去判断密码的复杂程度。

chatgpt,表达AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

信息爬取

在爬虫中,同样可以用 RE 去提取需要的信息 。

chatgpt,正则AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

简介

下面先给出一个简单的正则示例:

^[0-9]+abc$

我们在写用户注册表单时,只允许用户名包含字符 、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定:

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

在线测试工具

Regulex

正则表达式在线测试工具:https://regex101.com/

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

RegExr

正则表达式在线测试工具:https://regexr.com/

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

语法

构造正则表达式的方法和创建数学表达式的方法一样,用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式 。

普通字符

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符,这包括所有大写和小写字母、所有数字 、所有标点符号和一些其他符号 。

字符描述
[ABC]匹配 […] 中的所有字符,例如 [ae] 匹配字符串 “You are my angle.” 中所有的 a e 字母 。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
[^ABC]匹配除了 […] 中字符的所有字符,例如 [^ae] 匹配字符串 “You are my angle.” 中除了 a e 字母的所有字母。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
[A-Z][A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母 。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
.匹配除换行符(\n 、\r)之外的任何单个字符,相等于 [^\n\r]。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
[\s\S]匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行 。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
\w匹配字母 、数字 、下划线 。等价于 [A-Za-z0-9_] chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

非打印字符

非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

特殊字符

所谓特殊字符,就是一些有特殊含义的字符。

若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配  。有 * 、 +  、 ? 、 {n}  、 {n,}  、 {n,m} 共6种 。

限定符
* 匹配前面的子表达式零次或多次 。例如,ab* 能匹配 “a” 以及 “abb” 。* 等价于 {0,}。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
+ 匹配前面的子表达式一次或多次 。例如,ab+ 能匹配 “ab” 以及 “abb”,但不能匹配 “a”。+ 等价于 {1,}。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
? 匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 “do” 、 “does”、 “dog” 中的 “do” 和 “does” 。? 等价于 {0,1}。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
{n} n 是一个非负整数。匹配确定的 n 次。例如,o{2} 表示匹配2个 o,不能匹配 “Bob” 中的 o,但是能匹配 “food” 中的两个 o。 chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
{n,} n 是一个非负整数。至少匹配 n 次。例如,o{2,} 不能匹配 “Bob” 中的 o,但能匹配 “foooood” 中的所有 o。o{1,} 等价于 o+ 。o{0,} 则等价于 o* 。chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天
{n,m} m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 “fooooood” 中的前三个 o。o{0,1} 等价于 o? 。请注意在逗号和两个数之间不能有空格。 chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

以下正则表达式匹配一个正整数,[1-9]设置第一个数字不是 0,[0-9]* 表示任意多个数字:

/[1-9][0-9]*/

* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。

贪婪:下面的表达式匹配从开始小于符号 (<) 到关闭 h1 标记的大于符号 (>) 之间的所有内容。

/<.*>/

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天非贪婪:如果只需要匹配开始和结束 h1 标签,下面的非贪婪表达式只匹配

。

/<.*?>/

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

定位符

定位符用来描述字符串或单词的边界, ^ 和 $ 分别指字符串的开始与结束, \b 描述单词的前或后边界, \B 表示非单词边界 。

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天注意:不能将限定符与定位符一起使用 。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

修饰符

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。

标记不写在正则表达式里,标记位于表达式之外,格式如下:

/pattern/flags

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

元字符

元字符的完整列表:元字符 - 完整列表

实例

匹配邮箱

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天测试如下图:

chatgpt,AI,人工智能,聊天机器人,女友聊天机器人,在线ai对话,二次元聊天

参考: