Regex Perl正则表达式输出连字符多个“;字;

Regex Perl正则表达式输出连字符多个“;字;,regex,perl,Regex,Perl,当我有一个包含多个连字符的字符串时,我似乎能够找到(唯一)所需的值,但为什么会有多个输出?我想用连字符完整地报告匹配的字符串。我已经包括了输出可能是什么,以及重建字符串的方法,但是这个方法似乎是不必要的工作 my $string = "phonenumber123-456-7890"; my @secondStrings = $string =~ m/(\d+)-(\d+)-(\d+)/g; foreach (@secondStrings){ print $_, "\n"; } if (

当我有一个包含多个连字符的字符串时,我似乎能够找到(唯一)所需的值,但为什么会有多个输出?我想用连字符完整地报告匹配的字符串。我已经包括了输出可能是什么,以及重建字符串的方法,但是这个方法似乎是不必要的工作

my $string = "phonenumber123-456-7890";
my @secondStrings = $string =~ m/(\d+)-(\d+)-(\d+)/g;
foreach (@secondStrings){
    print $_, "\n";
}
if ($string =~ m/(\d+)-(\d+)-(\d+)/g){
    print $1."-".$2."-".$3, "\n";
}

我相信您只想将整个电话号码(123-456-7890)放入一个捕获组,现在您使用的是3

my ($number) = $string =~ m/(\d+-\d+-\d+)/g;

进一步的阅读可以在这里找到:

为什么你不把所有的东西都放在一个捕获组中?为什么在这个问题上投了反对票。这个问题可能很明显,但对于缺乏使用Perl/regexps(特别是捕获组)经验的人来说,情况并非如此。如果是因为问题的措辞,那可能是不经意间缺乏理解的直接结果。我相信你的意思是
my($number)=$string=~m/(\d+-\d+-\d+)/g否则标量上下文中的$number将被分配捕获的元素数。谢谢您的回答。这是解决所有实际目的,但如果只有一个匹配,为什么我需要一个捕获组呢?