preg_match のキャプチャ
<?php $words = explode(' ', 'abc ab ac'); foreach ($words as $word) { preg_match('/\A (a) (b)? (c)? \z/x', $word, $match); print_r($match); } ?>
% php test.php Array ( [0] => abc [1] => a [2] => b [3] => c ) Array ( [0] => ab [1] => a [2] => b ) Array ( [0] => ac [1] => a [2] => [3] => c )
最後のキャプチャがない。null なり空文字なりが入るもんだと思っていたけど、こういうもの?
Perl の場合はどうだろう。
use strict; use warnings; use Data::Dumper; my @words = qw(abc ab ac); for (@words) { my @match = /\A (a) (b)? (c)? \z/ox; print Dumper(\@match); }
% perl test.pl $VAR1 = [ 'a', 'b', 'c' ]; $VAR1 = [ 'a', 'b', undef ]; $VAR1 = [ 'a', undef, 'c' ];
こっちは思った通りな感じだ。