假设我想匹配并捕获由一个或多个空格分隔的 5 个整数 - 示例输入:
1111 234 3333 456 7890
我可以这样做:
my $input = '1111 234 3333 456 7890';
if($input =~ /^\s*([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/)
{
#$1 = '1111', $2 = '234', $3 = '3333', $4= '456', $5 = '7890'
}
但我想做这样的事情来保持正则表达式更简单,而不是明确地重复每个 int 5次:
my $input = '1111 234 3333 456 7890';
if($input =~ /^((\s*[0-9]+){5})/)
{
#$1 = '1111 234 3333 456 7890';
#$2 = ' 7890'
#all other capture variables are undefined
}
但是,捕获似乎没有成功。
有没有办法我可以做到这一点并且仍然可以访问我的 5 个捕获?
更好的是未知数量的捕获:
my $input = '1111 234 3333 456 7890';
if($input =~ /^((\s*[0-9]+)+)/)
{
#foreach capture 1..N do something...
}