我写了以下正则表达式来获取字符串中的数字:
.show-dropdown
它按预期工作但我想知道为什么我需要在{
"player1" : [
"kills" : 0,
"deaths" : 0,
"wins" : 0
],
"player2" : [
"kills" : 0,
"deaths" : 0,
"wins" : 0
]
}
周围使用括号?没有括号,为什么它不起作用?我试图在网上找到一些关于它的信息,但没有发现任何信息。
为什么我可以像这样使用它:
my ($digits) = ($str =~ /(\d+)/);
我可以对$digits
进行更改吗?像这样:my $digits = ($str =~ /(\d+)/);
?
答案 0 :(得分:4)
有=
表示的两个赋值运算符:
Perl根据赋值的左侧(LHS)是否为某种聚合来决定使用哪一个。以下被认为是聚合,这导致使用列表赋值运算符:
(...)
(括号中的任何表达式)@array
@array[...]
%hash
@hash{...}
my
,our
或local
运营商之间存在两个差异。
第一个是评估其操作数的上下文。
第二个区别是他们的回归。
找到示例here。
第一个区别在于你的情况。
my $digits = $str =~ /(\d+)/;
使用标量赋值运算符,该运算符在标量上下文中评估$str =~ /(\d+)/
,从而评估/(\d+)/
。在标量上下文中,/(\d+)/
以及$str =~ /(\d+)/
评估匹配是否成功。
my ($digits) = $str =~ /(\d+)/;
使用列表赋值运算符,该运算符在列表上下文中评估$str =~ /(\d+)/
,从而评估/(\d+)/
。在列表上下文中,/(\d+)/
以及$str =~ /(\d+)/
评估匹配所捕获的字符串。