Regex Perl m//运算符无法与简单正则表达式匹配,这令人费解

Regex Perl m//运算符无法与简单正则表达式匹配,这令人费解,regex,perl,pcre,Regex,Perl,Pcre,今天,当我编写一个正则表达式来匹配一个提示输出,以便通过IPC::RUN与一个程序交互时,我在匹配一个简单的正则表达式时遇到了一个莫名其妙的失败 $ perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*@.*> /s' $ $ perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*@t.*> /s' OK $ 我想这可能是一个«@

今天,当我编写一个正则表达式来匹配一个提示输出,以便通过IPC::RUN与一个程序交互时,我在匹配一个简单的正则表达式时遇到了一个莫名其妙的失败

$ perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*@.*> /s'
$
$ perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*@t.*> /s'
OK
$
我想这可能是一个«@»作为符号插值的问题,但是

$ perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*\@.*> /s'
$
这太简单了,我似乎不明白问题出在哪里

Perl版本是Ubuntu 10.4上的5.10.1

有什么想法吗


提前感谢

您需要在要匹配的字符串中转义@,或者使用单引号-这在shell中很尴尬。 此外,在正则表达式的末尾还有一个额外的空格

perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*@.*> /s'  # Yours
perl -E 'say "OK" if "mbox user\@testdomain.it> " =~ /mbox\s+.*@.*>/s'  # Working

我认为你在正确的轨道上,但在错误的地方看插值

考虑字符串中的
@
发生了什么,而不是正则表达式。

试试这个(在字符串中的@前面加一个\):

perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*@.*> /s'  # Yours
perl -E 'say "OK" if "mbox user\@testdomain.it> " =~ /mbox\s+.*@.*>/s'  # Working

正如我所说的,它是如此简单,它正盯着我的脸。非常感谢在搜索末尾也有一个空格要匹配,所以这不是问题的一部分。实际上正则表达式末尾的空格是正确的。正确的插值。谢谢,在这种情况下也不尴尬,只需替换“和”。@FulvioScapin的用法,或者在
mbox周围使用单引号user@testdomain.it>
尽管在命令行perl-E中要做到这一点有点困难,因为整个命令都用单引号括起来。