可以使用 PHP 的 PCRE 函数的 Unicode 模式制作 UTF-8(仅限!)版本。
function utf8_str_word_count($string, $format = 0, $charlist = null) {
if ($charlist === null) {
$regex = '/\\pL[\\pL\\p{Mn}\'-]*/u';
}
else {
$split = array_map('preg_quote',
preg_split('//u',$charlist,-1,PREG_SPLIT_NO_EMPTY));
$regex = sprintf('/(\\pL|%1$s)([\\pL\\p{Mn}\'-]|%1$s)*/u',
implode('|', $split));
}
switch ($format) {
default:
case 0:
// For PHP >= 5.4.0 this is fine:
return preg_match_all($regex, $string);
// For PHP < 5.4 it's necessary to do this:
// $results = null;
// return preg_match_all($regex, $string, $results);
case 1:
$results = null;
preg_match_all($regex, $string, $results);
return $results[0];
case 2:
$results = null;
preg_match_all($regex, $string, $results, PREG_OFFSET_CAPTURE);
return empty($results[0])
? array()
: array_combine(
array_map('end', $results[0]),
array_map('reset', $results[0]));
}
}
str_word_count
这个函数尽可能地遵循语义;特别是,如果您在以下注释中将“localedependent”替换为“UTF-8”,str_word_count
则结果适用于此
出于此功能的目的,“word”被定义为包含字母字符的区域设置相关字符串,它也可以包含但不能以“'”和“-”字符开头。
此外,字符'
和-
被认为是单词的一部分,但不能开始;但是,$charlist
参数中指定的任何字符都可以开始一个单词,这意味着指定'
和/或-
稍微改变函数的工作方式。此行为也与原始str_word_count
.
值得注意的是,您可以通过适当地替换\pL
为字符属性(例如,\p{Greek}
参见PCRE Unicode 参考)使该函数仅识别 Unicode 脚本的某些子集。