Perl,模式匹配和元字符

时间:2012-02-28 16:29:55

标签: perl metacharacters

我正在尝试匹配两个都满足元字符的东西,这些元字符需要在我的匹配模式中用作“文字”。 \Q假设在\E之前引用字符串中的所有元字符...但它不起作用。

那是什么?

这是给我带来麻烦的一行:if (/\Q$prev\E/ !~ /\Q$ww[0]\E/) {

2 个答案:

答案 0 :(得分:11)

不使用=~!~

/.../

的缩写
$_ =~ m/.../

所以

/\Q$prev\E/ !~ /\Q$ww[0]\E/

的缩写
($_ =~ /\Q$prev\E/) !~ /\Q$ww[0]\E/

取决于左正则表达式匹配是否成功,相当于以下之一:

"" !~ /\Q$ww[0]\E/
"1" !~ /\Q$ww[0]\E/

你只想:

$prev !~ /\Q$ww[0]\E/   # $ww[0] doesn't contains $prev

如果你真的想要

$prev !~ /^\Q$ww[0]\E\z/   # $ww[0] isn't equal to $prev

然后你可以将其简化为

$prev ne $ww[0]   # $ww[0] isn't equal to $prev

顺便说一句,请始终使用use strict; use warnings;。它可能在这里发现了一个问题(但不一定,取决于$_的值)。

答案 1 :(得分:2)

您希望将$prev中的字符串与$ww[0]中的字符串进行比较。如果是这种情况,正则表达式匹配应如下所示:

$result = $prev !~ /\Q$ww[0]\E/
如果$result1中的内容不同,则{p> $prev将返回www[0],忽略元字符。

但是,如果这就是您想要做的,那么您也可以使用ne

if ($prev ne $ww[0]){ 
   #do this if $prev and $ww[0] are not the same
} 

另外,正如@toolic所提到的,将以下行添加到脚本的顶部:

use warnings;

这将为您提供有关脚本中可能出现的问题的一些反馈。

相关问题