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

前端之家收集整理的这篇文章主要介绍了为什么括号在分配此正则表达式匹配时如此重要?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一段代码

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

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

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

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

解决方法

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

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

If the /g option is not used,m// in
list context returns a list consisting
of the subexpressions matched by the
parentheses in the pattern,i.e.,($1
,$2,$3
…).
(Note that here $1
etc. are also set,and that this
differs from Perl 4’s behavior.)
When there are no parentheses in the
pattern,the return value is the list
(1) for success. With or without parentheses,an empty list is returned upon failure.

猜你在找的正则表达式相关文章