Perl 这个代码表达式的功能是什么?
我对正则表达式的功能感到困惑:Perl 这个代码表达式的功能是什么?,perl,Perl,我对正则表达式的功能感到困惑: /\[\]$/ 我尝试了一段简短的perl代码来理解它,但我仍然感到困惑。代码输出为Else my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}]}; if($addr2 =~ /\[\]$/) { print "If\n"; } else { p
/\[\]$/
我尝试了一段简短的perl代码来理解它,但我仍然感到困惑。代码输出为Else
my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}]};
if($addr2 =~ /\[\]$/) {
print "If\n";
}
else {
print "Else\n";
}
我以为/\[\]$/
会指出该值是否为数组,但事实似乎并非如此。然后我认为,考虑到正则表达式中有一个$
,该值可能必须以数组结尾。所以,我试着替换:
my$addr2={[{'firstname'=>'Nikhil','lastname'=>'Hegde'},{'firstname'=>'Nikhil2','lastname'=>'Hegde2'}],]}代码>
但这也不行。代码输出保持为Else
有谁能帮助我理解表达式/\[\]$/
?它做什么常规匹配?谢谢 正则表达式检查字符串的匹配。在本例中,您尝试匹配哈希引用。这就是您的代码转到else
块的原因
现在是/\[\]$/
。它匹配任何末尾有文字[]
的字符串。例如,字符串my$str=“just an example[]”
将与字符串末尾的这个正则表达式匹配。,该正则表达式匹配literal[]
(括号对)。因此它匹配字符串“hello[]”
,但不匹配“hello”
。不转义的括号是字符类。此外,可能还需要一个基本事实:正则表达式在字符串上工作——可能在变量中,但您在复杂的数据结构上尝试了它。超时。。。若要继续--您的$addr2
打印为散列(…)
--并且该字符串的末尾没有[]
。@zdim谢谢!这解释了lotAdd打印($addr2\n)注意,我们可以匹配一个引用--perl-we'$ra=[1,2];如果$ra=~/AR/',就说$ra
。只是hashref的结尾没有[]
:)@zdim不得不说我从来没有想过这个选项!你永远不知道什么时候会有这么奇怪的事情发生在手工艺品中,$addr2
的数据转储程序输出会澄清发生了什么事?@yon100:我无法想象这会有用。您已经可以使用==
比较两个引用的相等性,最好的方法是如果ref$ra eq'array'
@Sobrique,就说$ra,而不是。OP与$addr2
的字符串化匹配,因此打印($addr2\n”)代码>是澄清正在发生的事情的方法。