Perl 的字符串操作符 = 和 @136


在 Perl 中,= 和 @ 运算符是用于字符串操作的强大工具。它们能够执行各种操作,从简单字符串的拼接和连接到高级的模式匹配和替换。

字符串拼接(=)

= 运算符用于将两个或多个字符串连接在一起,形成一个新字符串。它等同于其他编程语言中的 + 运算符。
my $str1 = "Hello";
my $str2 = "World";
my $str3 = $str1 . $str2; # $str3 现在是 "HelloWorld"

字符串列表拼接(@)

@ 运算符用于将一组字符串连接在一起,形成一个新的字符串。它将参数视为一个字符串列表,并使用空格字符将它们连接在一起。
my @strs = ("Hello", "World", "Perl");
my $str4 = join(' ', @strs); # $str4 现在是 "Hello World Perl"

模式匹配(=~)

Perl 的 =~ 运算符用于执行模式匹配。它测试一个字符串是否与给定的正则表达式匹配。
my $str5 = "This is a test string";
if ($str5 =~ /test/) {
print "String contains 'test'";
}

模式替换(s///)

s/// 运算符用于执行模式替换。它查找与给定正则表达式匹配的子串,并用替换字符串替换它们。
my $str6 = "Perl is a powerful language";
$str6 =~ s/Perl/PHP/; # $str6 现在是 "PHP is a powerful language"

贪婪匹配和惰性匹配

在模式匹配和替换中,可以使用 ? 修饰符来指定贪婪匹配或惰性匹配。贪婪匹配会匹配尽可能多的字符,而惰性匹配只会匹配尽可能少的字符。
my $str7 = "abbbccc";
if ($str7 =~ /b+/) {
print "Found at least one 'b'";
}
if ($str7 =~ /b+?/) {
print "Found only one 'b'";
}

捕获组

在正则表达式中,可以定义捕获组以捕获匹配的子串。这些组可以使用 $1、$2 等特殊变量进行访问。
my $str8 = "Name: John Doe, Age: 30";
if ($str8 =~ /Name: (.*?), Age: (.*?)/) {
print "Name: $1, Age: $2"; # 输出:Name: John Doe, Age: 30
}

反向引用

反向引用允许在替换字符串中使用先前捕获的子串。它可以使用 \1、\2 等特殊序列来引用捕获组。
my $str9 = "This is a test string. This is another test string.";
$str9 =~ s/This (.*?) (.*?)/\2 \1./g; # 输出:is a test string. is another test string.

字符串修饰符

Perl 提供了几个字符串修饰符,用于控制字符串操作的行为。这些修饰符包括:* i:不区分大小写
* m:多行模式
* s:单行模式
* x:忽略空白和注释

示例:从 HTML 中提取链接

以下 Perl 代码使用正则表达式和 =、@ 运算符从 HTML 文档中提取链接:
use strict;
use warnings;
my $html = '';
my @links;
while ($html =~ /

2025-01-07


上一篇:Perl 中的 @: 数组变量

下一篇:深入理解 Perl 中的相等运算符 (==)