preg_matchのキャプチャ用サブパターンにマッチした文字列について
お世話になります
preg_matchのキャプチャ用サブパターンにマッチした文字列について
意図した動作が、試行錯誤しても全く得られませんので
分かる方にお教えいただきたく存じます
条件1
[*DATA: *]で囲まれたデータ(以下DATA)を取得
条件2
DATAにはoXoまたはoYoが順不同で、それぞれ1回または0回出現する
$test = '[*DATA: A oYo B oXo C *]';
$reg = '/\[\*DATA:(.*?)(oXo|oYo)(.*?)(oXo|oYo)?(.*?)\*\]/u';
preg_match($reg,$test,$match);
$matchの結果
$match[0] => [*DATA: A xYx B xXx C *]
$match[1] => A
$match[2] => oYo
$match[3] =>
$match[4] =>
$match[5] => B oXo C
期待した結果
$match[0] => [*DATA: A oYo B oXo C *]
$match[1] => A
$match[2] => oYo
$match[3] => B
$match[4] => oXo
$match[5] => C
1回または0回を表す「(oXo|oYo)?」が「0回」という条件が先に評価されてしまっているようなのですが「1回」を先にするすべはあるのでしょうか?
「(oXo|oYo)?」を「(oXo|oYo)」にすると期待した結果になりますが、条件2の「oXoが0回」「oYoが1回」出現した場合マッチしなくなります。
識者の方、お忙しい中恐縮ですがご教授いただけたらうれしいです。
お礼
お礼が遅くなり申し訳ありません。 ありがとうございます。 他のカードについても、御存知であれば、よろしくお願いします。 昔、どこかのサイトで観ることが出来た気がするのですが、どうにも思いだせないのです。