2011-12-07 19 views
3

マルチバイト文字列をPHPの単語に分割する方法は?ここ は、私がこれまでにやっていることですが、私は、コードを改善したいと思います...マルチバイト文字列をPHPの単語に分割する方法は?

mb_internal_encoding('UTF-8'); 
    mb_regex_encoding('UTF-8'); 
    $arr = mb_split('[\s\[\]().,;:-_]', $str); 

ない(単語は「アルファ」-charactersのシーケンスであると言うする方法はありますアルファベット以外の文字を含めるので、表記azを使用してください)

+0

何あなたの文字列はのようなもので、どのような文字セットを使っていますか。 –

+0

どのように\ b単語の境界 –

+0

私はutf-8を使用しています! – ragnarius

答えて

5

ここで、この赤ちゃんをお試しください:

preg_match_all('/[\p{L}\p{M}]+/u', $subject, $result, PREG_PATTERN_ORDER); 
for ($i = 0; $i < count($result[0]); $i++) { 
    # Matched text = $result[0][$i]; 
} 

マッチ言葉としてのアクセントを持つすべての可能な文字を:

 " 
[\p{L}\p{M}]  # Match a single character present in the list below 
        # A character with the Unicode property “letter” (any kind of letter from any language) 
        # A character with the Unicode property “mark” (a character intended to be combined with another character (e.g. accents, umlauts, enclosing boxes, etc.)) 
    +    # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
" 

See it.

+0

非ラテン語の場合は、単語の最後の文字が欠けています。 "ocksåhärfinnshö" => ocks、här、finns、h – ragnarius

+0

@ragnariusの文章が修正されました。理由は、単語の境界がUTF-8でうまく動かないということでした。 – FailedDev

+0

素晴らしい!しかし、どういう意味ですか? – ragnarius

0

多くの言語では単語(中国語)は使用されません。その場合、関数は文字列全体を返すべきですか? PHPでは、explode()はバイナリセーフなので、単一のセパレータだけが必要な場合は、それを使うほうが速いかもしれません。

+0

いいえ私は多くのセパレータが必要です、文字ではないすべての文字はセパレータでなければなりません。バージョン1.0で中国語を扱うのは大丈夫でしょう。 – ragnarius

0

多分\wを使用する必要がありますか?

関連する問題