正则表达式 – 括号如何更改正则表达式匹配的结果?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 括号如何更改正则表达式匹配的结果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
任何人都可以解释为以下两种语法之间的区别:

($x) = $a =~ /(\d+)/;

$y = $a =~ /(\d+)/;

在示例中,如果$a = 100lkj则
$x = 100但$y = 1.

使用此代码,我试图提取$string中的数值.

我不明白为什么?

解决方法

在括号内写入变量时,会强制列出上下文.这意味着,您要分配给该变量的内容也将被解释为列表.

在您的情况下,您有一个正常的匹配.匹配的返回值是一个列表,包含所有匹配项.如果将列表强制转换为标量上下文,则返回此列表中的条目数.所以你有1个匹配,这意味着这个列表包含1个匹配.

不建议使用正则表达式的返回值.

您可以使用变量$1,$2,$3,…作为匹配项(括号中的匹配项).

在你的情况下:

$a =~ /(\d+)/;
$x = $1;

BTW:$a和$b是排序的特殊变量.请不要使用它们:).

($x) = $a =~ /(\d+)/;
# $x is the first element of the RegEx return value
# ($x,$y,$z) = $a =~ /(\d)(\d)(\d)/;
# $x = first match,$y = second and so on.

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