Regex perl正则表达式,用于插入字符而不在某些点使用函数

Regex perl正则表达式,用于插入字符而不在某些点使用函数,regex,perl,Regex,Perl,我正在尝试编写一个脚本,检查字符串是否有9个字符。该字符串将分为3组。第一组有三个数字,第二组有两个数字,第三组有四个数字。我想用括号捕捉这些内容并打印出来。我写了以下内容,认为它100%正确,但不起作用: my $numbers = 123456789; ( my $three, my $two, my $four ) = ( $numbers =~ /([0-9]{3})([0-9]{2})([0-9]{4})/); print "$three-$two-$four"; 它打印123-

我正在尝试编写一个脚本,检查字符串是否有9个字符。该字符串将分为3组。第一组有三个数字,第二组有两个数字,第三组有四个数字。我想用括号捕捉这些内容并打印出来。我写了以下内容,认为它100%正确,但不起作用:

my $numbers =  123456789;

( my $three, my $two, my $four ) = ( $numbers =~ /([0-9]{3})([0-9]{2})([0-9]{4})/);
print "$three-$two-$four";
它打印
123-4567


根据我的理解,上面的正则表达式说:“0-9之间的数字有3个重复并捕获值,0-9之间的数字有2个重复并捕获值,0-9之间的数字有4个重复并捕获值,除此之外没有其他内容。数字前后不能有任何其他字符。”

您需要确保数字从字符串的开头开始,并在字符串的结尾结束,否则
1234567891
将匹配

my ($first, $second, $third) = $number =~ /^([0-9]{3})([0-9]{2})([0-9]{4})\z/
   or die("Invalid input\n");

print "$first-$second-$third\n";

对我来说很好。也许您是偶然运行了一个早期版本的程序,以获得该输出?您的实际输入是否有任何不同?假设123456789如下所示,“1234567891”如果大于9,则无效,并应显示错误。我以为$是字符串的结尾。对,这是我做的主要更改。//<代码>\z是字符串的结尾
$
(不带
/m
)表示
(?=\n?\z)
。我对此有点陌生。我只读过,不熟悉\z是什么。
/^1234$/
将匹配
“1234”
,但它也将匹配
“1234\n”