preg_matchではサブパターンに命名して以下$name1が取得できますが、これを複数命名できませんでしょうか?
<?php $str = 'abc-123-xyz'; preg_match( '/abc-(?P<name1>[0-9]+)-xyz/', $str, $m ); echo $m['name1']; // -> 123
例えば、name2も命名するならこのようなイメージです。
<?php $str = 'abc-123-xyz'; preg_match( '/abc-(?P<name1><name2>[0-9]+)-xyz/', $str, $m ); echo $m['name1']; // -> 123 echo $m['name2']; // -> 123
他にざっと以下試しましたができず、方法はないだろうなぁとは思いつつ、もし裏技てきに何かご存じの方がいればと…
(?P<name1><name2>[0-9]+) (?P<name1&name2>[0-9]+) (?P<name1,name2>[0-9]+) (?P<name1>P<name2>[0-9]+)
なぜ同じマッチングに対して複数のキャプチャが必要となるのでしょうか。
あった方が便利な状況だからです。
正規表現でマッチングさせた後に「$m['name2'] = $m['name1'];」のようにコピーする、という方法も考えられますが、どうしても「正規表現で」やりたいのですか?
わかりますがそちらは命名したものが単一のケースで、複数ある時は if elseif elseif となり大変ですよね。正規表現のパターンが複数あり、命名も複数あるケースで、まぁ、いろいろありまして。
多分やらないほうがいいとは思いますが、できるかできないかという意味ではできそうなので回答しておきました
状況によっては、その「いろいろ」の方を改造するほうが手っ取り早い、という可能性もありますが、いったんはここまでとします。