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'
];こっちは思った通りな感じだ。