2011-12-07 37 views
3

如何在PHP中将多字节字符串拆分为单词? 以下是我迄今所做的,但我想提高代码...如何将多字节字符串拆分为Php中的单词?

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

有没有办法说一个字的“阿尔法” -characters序列(不使用符号az,因为我想包括非拉丁字符)

+0

什么是你的字符串等,什么字符集你正在用吗。 –

+0

\ b字边界怎么样 – 2011-12-07 20:41:58

+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它?

相关问题