如何在Php中将多字节字符串拆分为单词?

如何在Php中将多字节字符串拆分为单词?,php,regex,Php,Regex,如何在Php中将多字节字符串拆分为单词? 这是我到目前为止所做的,但我想改进代码 mb_internal_encoding( 'UTF-8'); mb_regex_encoding( 'UTF-8'); $arr = mb_split( '[\s\[\]().,;:-_]', $str ); 有没有一种方法可以说一个单词是一系列字母字符(不使用符号a-z,因为我想包括非拉丁字符)许多语言不使用单词(中文)。在这种情况下,函数是否应该返回整个字符串?在PHP中,explode(

如何在Php中将多字节字符串拆分为单词? 这是我到目前为止所做的,但我想改进代码

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

有没有一种方法可以说一个单词是一系列字母字符(不使用符号a-z,因为我想包括非拉丁字符)

许多语言不使用单词(中文)。在这种情况下,函数是否应该返回整个字符串?在PHP中,explode()是二进制安全的,因此如果您只需要一个分隔符,就可以更快地使用它。

也许您应该使用
\w

试试这个婴儿:

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];
}

您的字符串是什么样的,您使用的是什么字符集。不,我需要很多分隔符,每个不是字母的字符都应该是分隔符。在1.0版中,不使用中文是可以的。如果不是拉丁语,它会漏掉单词中的最后一个字母。“ocksåhär finns hö”=>ocks,här,finns,h@ragnarius固定的。原因是单词边界不能很好地与UTF-8配合使用:)太好了!但/u是什么意思?@ragnarius请务必查看最新编辑/u表示支持较大的Unicode范围(即:[\x{E000}-\x{FFFD}]或\x{10FFFFF})。在“också!hår finns hö!”这句话中没有“också”和“hö”这是答案吗?猜猜看?暗示?有问题吗?
     "
[\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)
"