[PHP-users 1980] Re: シングルバイト文字とマルチバイト文字の分割
Toshikazu Yoshikawa
php-users@php.gr.jp
Tue, 11 Sep 2001 14:21:41 +0900
吉川@アンカットです。
重松様、早速のお返事ありがとうございます。
> (1) JIS に変換して、explode()。
>
> (snip)
>
> (2) mbereg() を使う。
せっかくお返事をいただいたのですが、preg_sprit()で解決しました。
PHP-4.0.5以上でないと動かず、考え方も若干邪道のような気がしますが、
シングルバイト文字は0x20(スペース)〜0x7e(チルダ)の範囲にあるものとして、
以下のスクリプトを書きました。
改行コード等はあらかじめ取り除いておくものとします。
<?php
$str = "日本語とEnglishの混在したtextです";
$buf = preg_split ("/([ -~]+)/", $str, -1,
PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for ($i = 0;$i < count ($buf);$i++) print $buf[$i]."<BR>\n";
?>
シングルバイト文字の連続したものをデリミタにし、
(EUCは第1第2バイトとも0xA1〜0xFFなので引っかからない)
4.0.5以上で追加されたPREG_SPLIT_DELIM_CAPTUREフラグを使って、
デリミタも返してもらうという戦略です。
結果はめでたく
------------
日本語と
English
の混在した
text
です
------------
となりました。
mb_convert_kana()のような関数もあるので、すぐにできるかと思ったんですが、
意外にハマりました。
---
unCut Technology
Toshikazu Yoshikawa
mailto:yoshikawa@uncut.co.jp