1 つ以上のスペースで区切られた 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...
}