Perl m //运算符莫名其妙地无法匹配简单的正则表达式

时间:2011-02-07 11:44:39

标签: 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
$

我认为这可能是插入«@»作为印记的问题,但是

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

这很简单,我似乎无法理解问题所在。

在Ubuntu 10.4上的Perl版本是5.10.1

有什么想法吗?

提前致谢

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

你需要转义要匹配的字符串中的@或使用单引号 - 这在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

答案 2 :(得分:3)

试试这个(在字符串中的@之前添加一个额外的\):

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