Perl:基本的Perl正则表达式解析为word @ word

时间:2018-11-02 18:46:36

标签: regex perl

我以这种格式(从另一个脚本)获得对脚本的输入 xyz @ abc

我的脚本中有此匹配条件

 if ($test =~ /.* by (\w+)\@(\w).*/) { print $1; }

由于某种原因,该比赛没有比赛。

我尝试了以下一个命令行:

选项1:

perl -e 'my $aa = "abcd@abcd" ; if ($kk =~ /(\w+)\@(\w+)/) {print "\n  $1 \n $2 \n";}

选项2:

perl -e 'my $aa = q[abcd@abcd] ; if ($kk =~ /(\w+)@(\w+)/) {print "\n  $1 \n $2 \n";}

打印选项2,但不打印选项1。有人可以解释一下原因。

1 个答案:

答案 0 :(得分:2)

命令行中存在两个问题:

您分配了变量$ aa,但对变量$ kk进行了模式匹配。

第二个原因是@abcd被解释为字符串中以“ ...”分隔的变量。变量@abcd没有定义,因此它插值到一个空字符串,实际上,您有$ aa =“ abcd”。

当您键入以下内容时,您会看到@的问题:

perl -e 'my $aa = "abcd@abcd"; print "$aa\n"'

您必须屏蔽@。因此,请尝试以下操作:

perl -e 'my $aa = "abcd\@abcd"; if ($aa =~ /(\w+)@(\w+)/ ) {print "\n $1 \n $2 \n";}'