[英]Perl assign regex match groups to variables
我有一个以下格式的字符串: _num1_num2
。 我需要为某些变量分配num1
和num2
值。 我的正则表达式是(\\d+)
,它在Rubular.com上显示了正确的匹配组,但我不知道如何将这些匹配组分配给某些变量。 有谁能够帮助我? 谢谢你。
使用g-modifier还可以取消分组括号:
my ($five, $sixty) = '_5_60' =~ /\d+/g;
这允许任何整数分离,但它不验证输入格式。
在第一个答案中使用全局标志有点令人困惑。 正则表达式/ _(\\ d +)_(\\ d +)/已经捕获了两个整数。 此外,g修饰符尝试多次匹配。 所以这是多余的。
恕我直言,当匹配数未知或简化正则表达式时,应使用g修饰符。
据我所知,这与JavaScript中的工作方式完全相同。
这里有些例子:
use strict;
use warnings;
use Data::Dumper;
my $str_a = '_1_22'; # three integers seperated by an underscore
# expect two integert
# using the g modifier for global matching
my ($int1_g, $int2_g) = $str_a =~ m/_(\d+)/g;
print "global:\n", Dumper( $str_a, $int1_g, $int2_g ), "\n";
# match two ints explicitly
my ( $int1_e, $int2_e) = $str_a =~ m/_(\d+)_(\d+)/;
print "explicit:\n", Dumper( $str_a, $int1_e, $int2_e ), "\n";
# matching an unknown number of integers
my $str_b = '_1_22_333_4444';
my @ints = $str_b =~ m/_(\d+)/g;
print "multiple integers:\n", Dumper( $str_b, \@ints ), "\n";
# alternatively you can use split
my ( $int1_s, $int2_s ) = split m/_/, $str_a;
print "split:\n", Dumper( $str_a, $int1_g, $int2_g ), "\n";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.