Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么Perl匹配regexp的细微差别会引起头痛?_Regex_Perl - Fatal编程技术网

什么Perl匹配regexp的细微差别会引起头痛?

什么Perl匹配regexp的细微差别会引起头痛?,regex,perl,Regex,Perl,此代码无法识别它似乎要识别的任何键: if( $key =~ /upsf|free|ground|sla|pickup|usps/ ) 所以我把它改成: if( $key eq 'upsf' || $key eq 'free' || $key eq 'ground' || $key eq 'sla' || $key eq 'pickup' || $key eq 'usps' ) 在我看来,它们在功能上是等价的,所以我试图找出第一个失败的原因。它在Windows7上

此代码无法识别它似乎要识别的任何键:

if( $key =~ /upsf|free|ground|sla|pickup|usps/ )
所以我把它改成:

    if( $key eq 'upsf' || $key eq 'free' 
    || $key eq 'ground' || $key eq 'sla' 
    || $key eq 'pickup' || $key eq 'usps' )
在我看来,它们在功能上是等价的,所以我试图找出第一个失败的原因。它在Windows7上的XAMPP下是Perl,但在Linux机器上的Apache2下也是Perl

在Windows和Linux上都可以打印“shelfit”

$key = 'upsf';
if( $key =~ /^(upsf|free|ground|sla|pickup|usps)$/ ) {
    print 'ship it';
} else {
    print 'shelf it';
}

它们不是等价的,因为第一个中的比较运算符是“=~”(“contains”), 其中第二个是“eq”(“显式匹配,等于”)

第一次失败的原因到底是什么?$key的测试值是多少

$key = 'xxx';
if( $key =~ /upsf|free|ground|sla|pickup|usps/ ) {
    print 'ship it';
} else {
    print 'shelf it';
}
将打印“搁置”。 例如,$key='xusps'将打印'ship it',通过'=~'操作符(“contains”)匹配,这可能不是您的目标

这个怎么样:

if ($key =~ /^(?:upsf|free|ground|sla|pickup|usps)$/) {
  # ...
} else {
  # ...
} 
我的错! 此代码由ClickCart Pro执行,它从文件中读取该代码并按如下方式进行预处理:

$custom_script_code =~ s/\`/\'/gs;
$custom_script_code =~ s/\|\|/%7C%7C/g;
$custom_script_code =~ s/\|/ /gs;
$custom_script_code =~ s/%7C%7C/\|\|/g;
$custom_script_code =~ s/system/System/gs;
$custom_script_code =~ s/exec/Exec/gs;
$custom_script_code =~ s/die/Die/gs;

这里的第三句话删除了管道。谢谢Kryptronics!(讽刺)佩雷尔的评论被夸大了。我不应该因此得到任何分数。对不起,我浪费了大家的时间

你在匹配什么文本?
$key
的值是多少?您的第二行实际上等于
/^(upsf | free | ground | sla | pickup | usps$)/
,而不是
/upsf | free | ground | sla | pickup | usps/
。它应该有效,也许您遗漏了什么?您的问题没有意义。给出适当的输入,所提供的代码应该可以工作。请给我们一个简短、完整且正确的示例(包括输入),以演示您的问题。我想你会发现,在这种情况下,你的问题在于你的输入。哈,奇怪的解决方案:
$c='free';打印索引(join(“|”),qw(upsf免费地面sla拾取usps)),$c)注意我的编辑,因为simbabque是正确的(尽管loldop也是正确的)。perreal,你试过Perl的代码了吗?我想是洛多普干的,但我不知道。复制这种奇怪的失败将不胜感激。