Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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字符串匹配在不应该匹配的情况下失败_Perl_String Comparison - Fatal编程技术网

Perl字符串匹配在不应该匹配的情况下失败

Perl字符串匹配在不应该匹配的情况下失败,perl,string-comparison,Perl,String Comparison,我的脚本中有以下代码 if($description =~ /\'/) { print "I am here\n"; $description =~ s/\'/'/g; } print "description = $description\n"; 当我运行此脚本时,由于比较失败,我无法获得“我在这里”输出 但是,当$description字符串包含撇号时 $description=棒球运动员的精神救赎和戒毒康复 上下文:我正在解析从调用nytimes bestsell

我的脚本中有以下代码

if($description =~ /\'/) {
    print "I am here\n";    
    $description =~ s/\'/'/g;
}
print "description = $description\n";
当我运行此脚本时,由于比较失败,我无法获得“我在这里”输出

但是,当$description字符串包含撇号时

$description=棒球运动员的精神救赎和戒毒康复


上下文:我正在解析从调用nytimes bestsellers API得到的字符串,该字符串以json格式返回,并存储在$description string中。

您不需要在正则表达式中转义引号。稍微修改代码:

use strict;
use warnings;

my $description="The baseball player's spiritual redemption and recovery from drug addiction.";

if($description =~ /'/)
{
        print "I am here\n";
        $description =~ s/'/foo/g;
}

print "description = $description\n";
生成以下输出:

I am here
description = The baseball playerfoos spiritual redemption and recovery from drug addiction.

您不需要在正则表达式中转义引号。稍微修改代码:

use strict;
use warnings;

my $description="The baseball player's spiritual redemption and recovery from drug addiction.";

if($description =~ /'/)
{
        print "I am here\n";
        $description =~ s/'/foo/g;
}

print "description = $description\n";
生成以下输出:

I am here
description = The baseball playerfoos spiritual redemption and recovery from drug addiction.

示例字符串不包含撇号。它包含一个U+2019右单引号


它应该匹配/\x{2019}/

您的示例字符串不包含撇号。它包含一个U+2019右单引号


它应该匹配/\x{2019}/

在if块之前添加print$description并发布输出,这样可以更容易地看到哪些有效,哪些无效。其中一个前提是false。$description不包含',或者消息已打印。请确保邮件实际上不包含',并记住,缓存可能会阻止邮件在打印后立即显示。感谢您提供的信息。你是对的。在if块之前添加print$description并发布输出,这样可以更容易地看到哪些有效,哪些无效。其中一个前提是false。$description不包含',或者消息已打印。请确保邮件实际上不包含',并记住,缓存可能会阻止邮件在打印后立即显示。感谢您提供的信息。你说得对,谢谢你的回复。我试过了,但问题仍然存在。当然,如果我们放一个带撇号的字符串,它会起作用。但是,如果从nytimes api给出的响应中分配了相同的字符串,则即使该字符串包含撇号,比较也会失败。我猜nytimes api提供的字符串编码可能有问题。感谢您在这方面的帮助。在这种情况下,可能是编码问题,也可能是字符串中有不可见字符。感谢您的回复。我试过了,但问题仍然存在。当然,如果我们放一个带撇号的字符串,它会起作用。但是,如果从nytimes api给出的响应中分配了相同的字符串,则即使该字符串包含撇号,比较也会失败。我猜nytimes api提供的字符串编码可能有问题。感谢您在这方面提供的帮助。在这种情况下,这可能是一个编码问题,或者字符串中可能有不可见的字符。无需转义。@w.k,如果您不使用\x{2019},则必须使用UTF-8对代码文件进行编码,并添加使用utf8;去吧。虽然确实不必使用\x{2019},但is降低了出错的风险,也避免了“和”混淆的可能性。@ikegami:context说,字符串没有在脚本内部定义,如果不是从外部定义,为什么要转义它?。因此,实际上不需要使用utf8;。还是我遗漏了什么?@w.k我想这是指通过执行类似于/[]/的操作并将第二个撇号更改为utf8撇号的文本副本来匹配它的可能性。@w.k,你在说什么字符串?唯一的转义是在正则表达式模式中。您回复了错误的帖子吗?没有必要转义它。@w.k,如果您不使用\x{2019},您必须使用UTF-8对代码文件进行编码,并添加使用utf8;去吧。虽然确实不必使用\x{2019},但is降低了出错的风险,也避免了“和”混淆的可能性。@ikegami:context说,字符串没有在脚本内部定义,如果不是从外部定义,为什么要转义它?。因此,实际上不需要使用utf8;。还是我遗漏了什么?@w.k我想这是指通过执行类似于/[]/的操作并将第二个撇号更改为utf8撇号的文本副本来匹配它的可能性。@w.k,你在说什么字符串?唯一的转义是在正则表达式模式中。你回复错帖子了吗?