preg_split関数を使って、いったん配列(アクション記号とテキスト本体からなる2次元配列)に格納するといいでしょう。
http://www.kokin.rr-livelife.net/php/php_post/php_post_20.html
preg_match_all を使ってみました。
<?php $str = <<<EOT 昔々あるところに、[l]おじいさんと、おばあさんがいました。[p][cm] ある日、おばあさんが川に行くと、[l]どんぶらこ、どんぶらこと、[l]桃が流れてきました。[p][cm] EOT; preg_match_all("/(.*)\[(l|p|cm)\]/Us", $str, $out, PREG_SET_ORDER); foreach ($out as $val) { echo "TEXT: " . $val[1] . "<br>\n"; echo "CMD : " . $val[2] . "<br>\n"; } ?>
出力結果。
TEXT: 昔々あるところに、 CMD : l TEXT: おじいさんと、おばあさんがいました。 CMD : p TEXT: CMD : cm TEXT: ある日 ある日、おばあさんが川に行くと、 CMD : l TEXT: どんぶらこ、どんぶらこと、 CMD : l TEXT: 桃が流れてきました。 CMD : p TEXT: CMD : cm
▽3
●
Lhankor_Mhy ●33ポイント ベストアンサー |
パースはjavascriptでやった方がいいんじゃないかな、と思います。どうせコマンドを判別して表示制御するのはjavascriptなんですし。
↓サンプル
http://jsfiddle.net/VMH8D/