我目前正在报道Perls RegExps,总的来说我理解它。逃避字符我也认为,即测试一个反斜杠,可以用m / \ /表示反斜杠需要继续进行购买\字符首先告诉perl在这个实例中搜索它作为它的通常含义
我对下面的代码不明白,这种模式匹配以及使用@ symbold(在if语句表达式中)测试电子邮件地址时使用的原因(\)。我不知道@是一个需要逃避的特殊角色还是我错过了什么?。
#!/usr/bin/perl
EMAIL:
{
print("Please enter your email address: ");
$email = <STDIN>;
if ($email !~ /\@/)
{
print("Invalid email address.\n");
redo EMAIL;
}
else
{
print("That could be a valid email address.");
}
}
答案 0 :(得分:11)
可能会逃脱以避免被解释为数组印记。这不是绝对必要的,但这是一个很难打破的习惯。
示例:
$e = "\@foo";
if ($e =~ /@/) {
print "yay\n";
}
的产率:
yay
同样:
$e = "foo";
if ($e =~ m@foo@) {
print "yay\n";
}
答案 1 :(得分:8)
@不是关于正则表达式的保留字符,但它适用于perl(它是数组符号)
答案 2 :(得分:5)
在Perl中,你可以逃避任何潜在的正则表达式元字符,并保证它是文字。
另外,对于@
,它是数组符号,所以如果有可能将它误认为@/
变量,则值得逃避。
答案 3 :(得分:5)
在Perl中将数组插入到双引号字符串和正则表达式中,并在每个元素之间使用特殊变量$"
(默认情况下为空格字符):
my @array = ('a', 'b', 'c');
print "@array"; # prints "a b c"
print "a b c" =~ /@array/; # prints "1"
我很少使用此功能,但偶尔会派上用场,例如:
sub line_matches_words {
my ($line, @words) = @_;
local $" = '[ \t]+';
return $line =~ /^[ \t]*@words[ \t]*$/;
}