Mik*_*ley 9 regex perl escaping
我目前正在报道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.");
}
}
Run Code Online (Sandbox Code Playgroud)
mkb*_*mkb 12
它可能是为了避免被解释为数组印记而逃脱.这不是绝对必要的,但这是一个很难打破的习惯.
例子:
$e = "\@foo";
if ($e =~ /@/) {
print "yay\n";
}
Run Code Online (Sandbox Code Playgroud)
收益率:
yay
Run Code Online (Sandbox Code Playgroud)
与:相同:
$e = "foo";
if ($e =~ m@foo@) {
print "yay\n";
}
Run Code Online (Sandbox Code Playgroud)
数组被插入到Perl中的双引号字符串和正则表达式中,$"每个元素之间都有特殊变量(默认为空格字符):
my @array = ('a', 'b', 'c');
print "@array"; # prints "a b c"
print "a b c" =~ /@array/; # prints "1"
Run Code Online (Sandbox Code Playgroud)
我很少使用此功能,但偶尔会派上用场,例如:
sub line_matches_words {
my ($line, @words) = @_;
local $" = '[ \t]+';
return $line =~ /^[ \t]*@words[ \t]*$/;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9167 次 |
| 最近记录: |