php5 + utf8 について


ある文章を先頭から50文字の位置で切り分けたいのですが
きちんと文字と文字の間で切れる方法を教えてください。

文章は英数字日本語その他色々な文字を含んでいるとします。

EUCだと下記のように取得出来ますがUTF-8で
同様のことがしたいと考えています。
(([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]){50})

よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2008/12/20 23:49:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:i_kumagoro No.1

回答回数170ベストアンサー獲得回数58

ポイント60pt
(([\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}){50})

でいけると思います。Perlの正規表現ですが、このあたりが参考になると思います。

id:worldtravel

ありがとうございます。

が、だめでした...

追記

申し訳ありません。

検証のしかたに問題があったようです。

問題なく動作しました。

ありがとうございました。

2008/12/20 23:49:37
  • id:i_kumagoro
    <?php
    $string = 'AあBいCうDえEおFかGきHくIけJこKさLしMすNせOそPたQちRつSてTとUなVにWぬXねYのZAあBいCうDえEおFかGきHくIけJこKさLしMすNせOそPたQちRつSてTとUなVにWぬXねYのZ';

    echo "String: " . $string . "\n";
    preg_match('/(([\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}){50})/', $string, &$match);
    echo "Result: " . $match[0] . "\n";
    ?>

    以上の(UTF-8で書かれた)コードで正しく動作していることを確認しています。私は回答回数が上限の様なのでどのみち無理ですが、どのように検証してどのようにだめだったのかがないと新たな回答は得られにくいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません