人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでの対象文字列の分割について質問です。

文章を分割したいのですがうまくいきません。
分割対象にはマルチバイト文字やシングルバイト文字が混在していてます。
一例ですが以下のような感じです。

$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を使ってもマルチバイトとシングルバイトの文字の混合だとどうしても綺麗に分割はしてくれないようです。

こういった混在している文字でうまく分割をする際の手順や流れなどあればご教示いただけないでしょうか。

●質問者: quocard
●カテゴリ:インターネット ウェブ制作
✍キーワード:PHP シングル バイト マラソン大会 マルチ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● HowAreYou
●60ポイント

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) ;
◎質問者からの返答

回答ありがとうございます。

文字単位での分割ではなく、目印となるもので分割していけばいいですね。

出来るだけ細かくしようとして色々と変なことになってました。

参考にさせていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ