regex - Perl:($num) 和 $num 之间的区别

标签 regex perl regex-group

这个问题在这里已经有了答案:





What's the difference between my ($variableName) and my $variableName in Perl?

(4 个回答)


4年前关闭。




有人可以向我解释为什么这是差异:

my $num = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
> $num = 1
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
> $num = 1311875297587

我非常想知道有什么恶作剧在等着我。

谢谢

最佳答案

在 Perl 中,括号通常只是改变优先级。 (例如 3+4*5(3+4)*5 )

异常(exception)情况是在赋值运算符的左侧 (LHS) 找到括号。在这种情况下,它会影响将使用 Perl 的两个赋值运算符中的哪一个。

如果分配的 LHS 是某种聚合,则使用列表分配。否则,使用标量赋值。以下被认为是聚合:

  • (...) (括号中的任何表达式)
  • @array@array[...]
  • %hash@hash{...}
  • my (...) , our (...)local (...) (state (...) 引发错误。)

  • Mini-Tutorial: Scalar vs List Assignment Operator对于两个运营商之间的差异。

    在您的情况下,相关差异是评估作业右侧(RHS)的上下文。
  • 标量赋值在标量上下文中评估其 RHS 操作数。在标量上下文中,匹配运算符返回一个 bool 值,指示成功或失败。
  • 列表赋值在列表上下文中评估其 RHS 操作数。在列表上下文中,匹配运算符返回它捕获的字符串(或 1,如果匹配成功并且模式不包含捕获)。
  • 关于regex - Perl:($num) 和 $num 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431904/

    相关文章:

    python - Pandas extractall() - 返回列表,而不是多级索引?

    正则表达式匹配 3 个字符后跟整数

    perl - 使用 Perl 的 DBI 批量插入

    linux - Git Install Script 如何输入shell命令

    perl - 如何判断 Perl 脚本是否在 CGI 上下文中执行?

    javascript - Node.js 中的正则表达式不匹配

    java - 数字的正则表达式

    java - java中replaceAll方法的特殊问题

    javascript - 如何从正则表达式匹配函数中获取匹配的组?

    javascript - 在脚本末尾发布引用