我需要一些关于如何在PHP中分割混有英文单词和数字的汉字的帮助。
例如,如果我读了
FrontPage 2000中文版應用大全
我希望得到
FrontPage, 2000, 中,文,版,應,用,大,全
或
FrontPage, 2,0,0,0, 中,文,版,應,用,大,全
我怎样才能做到这一点?
提前致谢:)
答案 0 :(得分:10)
假设您使用的是UTF-8(或者您可以使用Iconv或其他工具将其转换为UTF-8),那么使用u
修饰符(doc:http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php)
<?
$s = "FrontPage 2000中文版應用大全";
print_r(preg_match_all('/./u', $s, $matches));
echo "\n";
print_r($matches);
?>
将给出
21
Array
(
[0] => Array
(
[0] => F
[1] => r
[2] => o
[3] => n
[4] => t
[5] => P
[6] => a
[7] => g
[8] => e
[9] =>
[10] => 2
[11] => 0
[12] => 0
[13] => 0
[14] => 中
[15] => 文
[16] => 版
[17] => 應
[18] => 用
[19] => 大
[20] => 全
)
)
请注意,我的源代码也存储在以UTF-8编码的文件中,$ s包含这些字符。
以下内容将字母数字作为一组匹配:
<?
$s = "FrontPage 2000中文版應用大全";
print_r(preg_match_all('/(\w+)|(.)/u', $s, $matches));
echo "\n";
print_r($matches[0]);
?>
结果:
10
Array
(
[0] => FrontPage
[1] =>
[2] => 2000
[3] => 中
[4] => 文
[5] => 版
[6] => 應
[7] => 用
[8] => 大
[9] => 全
)
答案 1 :(得分:1)
使用此代码,您可以将中文文本(utf8)包装在行尾,以便它仍然可读
print_r(preg_match_all('/([\w]+)|(.)/u', $str, $matches));
$arr_result = array();
foreach ($matches[0] as $key => $val) {
$arr_result[]=$val;
$arr_result[]="​"; //add Zero-Width Space
}
foreach ($arr_result as $key => $val) {
$out .= $val;
}
return $out;
答案 2 :(得分:1)
/**
* Reference: http://www.regular-expressions.info/unicode.html
* Korean: Hangul
* CJK: Han
* Japanese: Hiragana, Katakana
* Flag u required
*/
preg_match_all(
'/\p{Hangul}|\p{Hiragana}|\p{Han}|\p{Katakana}|(\p{Latin}+)|(\p{Cyrillic}+)/u',
$str,
$result
);
如果您使用的是PHP 7.0,那么这个适用于我。
这个没有用。我很遗憾地投票给一个不起作用的解决方案......
<?
$s = "FrontPage 2000中文版應用大全";
print_r(preg_match_all('/(\w+)|(.)/u', $s, $matches));
echo "\n";
print_r($matches[0]);
?>