正则表达式工具 |
grep |
PowerGREP |
RegexBuddy |
RegexMagic |
通用应用程序 |
EditPad Lite |
EditPad Pro |
语言和库 |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery 和 XPath |
XRegExp |
数据库 |
MySQL |
Oracle |
PostgreSQL |
本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS 源和博客 |
Perl 最初由 Larry Wall 设计,作为一种灵活的文本处理语言。多年来,它已发展成为一门成熟的编程语言,始终专注于文本处理。当万维网流行起来时,Perl 成为创建 CGI 脚本的事实标准。CGI 脚本是一个小软件,它根据数据库和/或访问网站的人员的输入生成动态网页。由于 CGI 脚本基本上是一个文本处理脚本,因此 Perl 是并且仍然是一个自然选择。
由于 Perl 专注于管理和处理文本,正则表达式文本模式是 Perl 语言的一个组成部分。这与大多数其他语言形成对比,在这些语言中,正则表达式可用作附加库。在 Perl 中,你可以使用 m// 运算符来测试正则表达式是否可以匹配字符串,例如:
if ($string =~ m/regex/) { print 'match'; } else { print 'no match'; }
执行正则表达式搜索和替换同样容易
$string =~ s/regex/replacement/g;
我在最后一个正斜杠后添加了一个“g”。“g”代表“全局”,它告诉 Perl 替换所有匹配项,而不仅仅是第一个匹配项。选项通常用斜杠表示,如“/g”,即使你没有添加额外的斜杠,即使你可以使用任何非单词字符代替斜杠。如果你的正则表达式包含斜杠,请使用另一个字符,如 s!regex!replacement!g。
您可以添加一个“i”使正则表达式匹配不区分大小写。您可以添加一个“s”使点匹配换行符。您可以添加一个“m”使美元符号和插入符号匹配字符串中嵌入的换行符,以及字符串的开头和结尾。
合在一起,您将得到类似于m/regex/sim;的内容
Perl 有一系列特殊变量,它们会在每次m//或s///正则表达式匹配后填充。$1、$2、$3等保存反向引用。$+保存最后一个(编号最高)的反向引用。$&(美元符号和)保存整个正则表达式匹配。
@-是一个数组,其中包含字符串中的匹配开始索引。$-[0]保存整个正则表达式匹配的开始位置,$-[1]保存第一个反向引用的开始位置,依此类推。同样,@+保存匹配结束位置。要获取匹配的长度,请从$+[0]中减去$-[0]。
在 Perl 5.10 及更高版本中,您可以使用关联数组%+获取由具名捕获组匹配的文本。例如,$+{name}保存由组“name”匹配的文本。Perl 不提供一种通过引用捕获组的名称来获取其匹配位置的方法。由于具名组也有编号,因此您可以对具名组使用@-和@+,但您必须自己找出组的编号。
$'(美元符号后跟撇号或单引号)保存正则表达式匹配之后(右侧)的字符串部分。$`(美元符号反引号)保存正则表达式匹配之前(左侧)的字符串部分。在性能至关重要的脚本中不建议使用这些变量,因为它会导致 Perl 减慢整个脚本中所有正则表达式匹配的速度。
所有这些变量都是只读的,并且会一直持续到尝试进行下一次正则表达式匹配。它们是动态作用域的,就好像它们在封闭作用域的开头有一个隐式的“local”一样。因此,如果您执行正则表达式匹配,并调用执行正则表达式匹配的子例程,当该子例程返回时,您的变量仍会像第一次匹配时一样设置。
“/g” 修饰符可用于处理字符串中的所有正则表达式匹配。第一个 m/regex/g 将找到第一个匹配,第二个 m/regex/g 将找到第二个匹配,依此类推。Perl 会自动记住字符串中下一次匹配尝试开始的位置,每个字符串都单独记住。以下是一个示例
while ($string =~ m/regex/g) { print "Found '$&'. Next attempt at character " . pos($string)+1 . "\n"; }
pos() 函数检索下一次尝试开始的位置。字符串中的第一个字符的位置为零。您可以通过将该函数用作赋值的左侧来修改此位置,如 pos($string) = 123;。
以上内容描述了如何将正则表达式与 Perl 一起使用,这可能就是您需要了解的所有内容。但是,如果您想深入了解 Perl 可以执行的所有与正则表达式相关的技巧,我建议您购买 Jeffrey Friedl 的 Mastering Regular Expressions 第二版。它有一个有趣的 80 页章节,介绍了与正则表达式相关的 Perl 怪癖。通用 Perl 书籍通常只包含本网站 教程 中解释得更好的通用内容。
我对 Mastering Regular Expressions 一书的评论
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| grep | PowerGREP | RegexBuddy | RegexMagic |
| EditPad Lite | EditPad Pro |
| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery 和 XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
页面网址:https://regexper.cn/perl.html
页面上次更新时间:2021 年 11 月 5 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。