文章を分割したいのですがうまくいきません。
分割対象にはマルチバイト文字やシングルバイト文字が混在していてます。
一例ですが以下のような感じです。
$sample = "今日はいい天気ですね。\n明日も<code>http://q.hatena.ne.jp/index.php?sample=sample&test=test</code>晴れるといいですね。\nでも明日はマラソン大会なので/hogehogesample/雨だと<code>とても</code>嬉しいです。";
この例で言うと<code>で囲まれた部分とそうでない部分に分けることが出来ればと考えております。
substrで取り出すためにstropsで出現位置を特定しようとしているのですがうまくいきません。
現在は
1.strposで<code>と</code>の位置を特定
2.「1」での値を元にsubstrで分割
としているのですが途中のシングルバイト文字でズレたりするようでうまくいきません。
mb_substrを使ってもマルチバイトとシングルバイトの文字の混合だとどうしても綺麗に分割はしてくれないようです。
こういった混在している文字でうまく分割をする際の手順や流れなどあればご教示いただけないでしょうか。
preg_split で分割してこんな感じ。
<?php $sample = "今日はいい天気ですね。\n明日も<code> http://q.hatena.ne.jp/index.php?sample=sample&test=test</code>晴れるといいですね。\nでも明日はマラソン大会なので/hogehogesample/雨だと<code>とても</code>嬉しいです。" ; $s = preg_split('!</?code>!', $sample) ; for ($i = 0, $s0 = $s1 = array(); $i < count($s); ++$i) { if ($i % 2) $s1[] = $s[$i] ; else $s0[] = $s[$i] ; } print_r($s0) ; print_r($s1) ;
出力例
Array ( [0] => 今日はいい天気ですね。 明日も [1] => 晴れるといいですね。 でも明日はマラソン大会なので/hogehogesample/雨だと [2] => 嬉しいです。 ) Array ( [0] => http://q.hatena.ne.jp/index.php?sample=sample&test=test [1] => とても )
おまけ
for 文は 1行でも書ける。みにくいのでお勧めはしません。
<?php $sample = "今日はいい天気ですね。\n明日も<code> http://q.hatena.ne.jp/index.php?sample=sample&test=test</code>晴れるといいですね。\nでも明日はマラソン大会なので/hogehogesample/雨だと<code>とても</code>嬉しいです。" ; $s = preg_split('!</?code>!', $sample) ; for ($i = 0, $s0 = $s1 = array(); $s[$i] && ${'s'.($i % 2)}[] = $s[$i]; ++$i) ; print_r($s0) ; print_r($s1) ;
回答ありがとうございます。
文字単位での分割ではなく、目印となるもので分割していけばいいですね。
出来るだけ細かくしようとして色々と変なことになってました。
参考にさせていただきます。