今天,在编写正则表达式以匹配提示输出以便通过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
有什么想法吗?
提前致谢
答案 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'