为什么括号在分配此正则表达式匹配时如此重要?

时间:2010-09-06 05:13:48

标签: regex perl

我有一段代码:

$s = "<sekar kapoor>";
($name) = $s =~ /<([\S\s]*)>/;
print "$name\n";               # Output is 'sekar kapoor'

如果在第二行代码中删除了括号,请在变量$name中删除:

$name = $s =~ /<([\S\s]*)>/;   # $name is now '1'

我不明白为什么它会像这样。任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:8)

在你的第一个例子中,你在左侧有一个列表上下文(你使用了括号);在第二个你有一个标量上下文 - 你只有一个标量变量。

请参阅Perl docs for quote-like ops匹配列表上下文

  

如果未使用/g选项,则m//位于。{   list context返回一个包含的列表   与表达式匹配的子表达式   模式中的括号,即($1 , $2 , $3 ...)   (请注意$1   等等也都设定了   与Perl 4的行为不同。)
  如果没有括号   模式,返回值是列表   (1)取得成功。有还是没有   括号,返回一个空列表   失败时。