Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Regex 为什么在分配这个正则表达式匹配项时括号如此重要?_Regex_Perl - Fatal编程技术网

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'