Regex 为什么在分配这个正则表达式匹配项时括号如此重要?
我有一段代码:Regex 为什么在分配这个正则表达式匹配项时括号如此重要?,regex,perl,Regex,Perl,我有一段代码: $s = "<sekar kapoor>"; ($name) = $s =~ /<([\S\s]*)>/; print "$name\n"; # Output is 'sekar kapoor' 我不明白它为什么会这样。有人能解释一下为什么会这样吗?在第一个示例中,左侧有一个列表上下文(您使用了括号);在第二种情况下,您有一个标量上下文-您只有一个标量变量 请参见,在列表上下文中匹配: 如果未使用/g选项,则在 列表上下文返回
$s = "<sekar kapoor>";
($name) = $s =~ /<([\S\s]*)>/;
print "$name\n"; # Output is 'sekar kapoor'
我不明白它为什么会这样。有人能解释一下为什么会这样吗?在第一个示例中,左侧有一个列表上下文(您使用了括号);在第二种情况下,您有一个标量上下文-您只有一个标量变量 请参见,在列表上下文中匹配: 如果未使用
/g
选项,则在
列表上下文返回一个包含
由
模式中的括号,即($1
,$2,$3
。。(注意这里
$1
等也都设置好了,这个
与Perl 4的行为不同。)当列表中没有括号时 模式,返回值为列表
(1)
成功。有无
在括号中,返回一个空列表
一旦失败
daxim编辑说明:在美国,括号表示
()
,括号表示[]
,大括号表示{}
。由于Perl最初是在美国设计和编写的,因此本文档使用了这些定义。然而,英国人用括号来表示()
,这是很不幸的,因为它造成了大量的混乱(特别是在像你的问题这样同时有括号和括号的情况下)。令人遗憾的是,一大群说英语的人将不得不在他们的脑海中翻译这些单词,但最好将其标准化,而不是留下混乱
$name = $s =~ /<([\S\s]*)>/; # $name is now '1'