日常正则表达式
2023-06-08 08:00:00
·
飞浪
·
Elle Krout
几乎每个程序员或系统管理员都会在职业生涯的某个阶段使用正则表达式;无论是简单地在vim中更改选定的文本,还是高级的验证详细信息。虽然在考虑正则表达式时想到令人困惑的象形文字并不罕见,但如果您使用L
几乎每个程序员或系统管理员都会在职业生涯的某个阶段使用正则表达式;无论是简单地在 vim 中更改选定的文本,还是高级的验证详细信息。虽然在考虑正则表达式时想到令人困惑的象形文字并不罕见,但如果您使用 Linux 或进行任何编程,那么您可能已经在许多日常任务中使用过它们。对于那些希望更详细地了解正则表达式的人,我们最近发布了掌握正则表达式,为了让您在不透露任何内容的情况下体验课程,我们将通过构建一个简单的基于 CLI 的正则表达式验证器来学习一些基本的正则表达式和一些基本的 Perl。
目标
我们希望创建一个命令行程序,它会要求我们输入两个东西:一个字符串和一个正则表达式。然后该程序会比较它们是否匹配。
但是正则表达式是什么?
正则表达式允许我们匹配模式,然后根据工具使用这些匹配项执行许多不同的任务。正则表达式可以匹配文字字符(即,a
匹配a
);元字符w
,如匹配任何字母数字字符;或转义字符.
,如用作文字句点,因为句点本身就是元字符。我们可以使用类、组、环视和条件等附加功能进一步细化我们的模式。
制作验证器
Perl 和正则表达式配合得很好;事实上,PCRE,即与 Perl 兼容的正则表达式,是最常见的正则表达式标准之一(即使 Perl 无法 100% 地实现它)。因此,用 Perl 学习正则表达式是个好主意,因为 Perl 几乎可以sed
用正则表达式完成所有事情。虽然像或 这样的程序grep
可能会限制您使用条件语句等功能的能力,但 Perl 支持几乎所有的正则表达式功能。那么让我们开始制作这个验证器吧!打开您喜欢的文本编辑器,打开一个空白文档;我使用了 vim,并将我的文件命名为regex-val.pl
。
- 添加 hashbang:
#! /usr/local/bin/perl
如果您不确定应该在这里放什么,请which perl
在命令行上运行。
- 现在,我们要设置一些变量,这些变量应在脚本运行时通过 STDIN 输入。我将
text
针对要验证的文本和regex
要验证的表达式调用这些变量: $text =
; $regex =
;
- 我们还想添加一些提示,以便当我们运行脚本时,我们知道我们输入的内容:
print "Enter a string: "; $text =
;
print
"Enter a regular expression: ";
$regex =
;
- 接下来,我们要检查我们的是否与
text
我们的匹配regex
,因此我们需要编写一个if
语句。为了在 Perl 中表示某个东西是正则表达式,我们需要将其括在正斜杠中: if ( $text =~ /$regex/ ) { }
这个表达式很简单:我们说if
我们的text
equals(=~
)我们的regex
,我们应该运行花括号中的函数。我们还没有写这个,但是因为我们想要做的就是验证两个东西是否匹配,所以我们只需添加一个简单的print
命令: if ( $text =~ /$regex/ ) { print "Match!n"; }
该=~
运算符专门用于检查像我们这样的标量text
是否与模式匹配。
- 当然,如果不匹配,我们也希望输出响应,因此我们可以用一条
else
语句: if ( $text =~ /$regex/ ) { print "Match!n"; } else { print "Not a match!n"; }
由此我们得到以下完整脚本: print "Enter a string: "; $text =
;
print
"Enter a regular expression: ";
$regex =
;
if (
$text =~ /
$regex/ ) {
print
"Match!n"; }
else {
print
"Not a match!n"; }
- 保存文件并使其可执行:
$ chmod +x regex-val.pl
- 通过检查 IP 地址是否符合 IP 地址的正则表达式来测试:
$ ./vali.pl Enter a string: 192.54.13.122 Enter a regular expression: d{1,3}.d{1,3}.d{1,3}.d{1,3} Match!
基本正则表达式速查表
想要测试一些正则表达式而不需要参加整个课程?这里有一个元字符和特征表。试试看吧!
表达 |
意义 |
w |
匹配任何基于单词的字符,AZ、az、0-9 |
W |
匹配任何非单词字符 |
d |
匹配任意数字,0-9 |
D |
匹配任何非数字 |
s |
匹配任意空格 |
s |
匹配任何非空白字符 |
t |
匹配任意标签 |
n |
匹配任何换行符 |
^ |
匹配行首 |
$ |
匹配行尾 |
b |
划定界限 |
[ ... ] |
设置字符类;例如:[abC] 可以匹配a 、b 或C |
[^ ... ] |
否定字符类;匹配除该类字母之外的任何字符 |
( ... ) |
将角色分组 |
| |
当成组使用时,它充当or |
? |
标记字符可选 |
+ |
重复前一个字符一次或多次 |
* |
重复前一个字符零次或多次 |
. |
通配符 |
准备好了解更多了吗?
然后查看我们关于掌握正则表达式的新课程并立即开始!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~