1
$str = "I want to eat我要吃飯 , you?你呢?";

我想要输出:

array(
0 => I,
1 => want, 
2 => to, 
3 => eat, 
4 => 我, 
5 => 要, 
6 => 吃,
...  ...
);

我试过了 :

1

function mb_str_split($str, $length = 1) {
  if ($length < 1) return FALSE;

  $result = array();

  for ($i = 0; $i < mb_strlen($str); $i += $length) {
    $result[] = mb_substr($str, $i, $length);
  }

  return $result;
}
var_dump(mb_str_split($str, 3));

上述方法仅适用于所有字符串均为繁体中文的情况。

2

preg_match("/\p{Han}+/u", $str, $matches);

以上方法只返回中文的第一个字符串,即我吃饭要。如何得到所有(我要吃饭,你呢)?

全部使用 UTF8。 
如何达到我想要的输出?

4

1 回答 1

0

编辑

从这段代码摘录中,您可能“只”需要弄清楚如何保留英文单词:

<?php

$words = "I want to eat我要吃飯 , you ? 你呢 ?";
$tokens = preg_split('/(?<!^)(?!$)/u', $words);
print_r($tokens);

//  Array
// (
//     [0] => I
//     [1] => w
//     [2] => a
//     [3] => n
//     [4] => t
//     [5] => t
//     [6] => o
//     [7] => e
//     [8] => a
//     [9] => t
//     [10] => 我
//     [11] => 要
//     [12] => 吃
//     [13] => 飯
//     [14] => ,
//     [15] => y
//     [16] => o
//     [17] => u
//     [18] => ?
//     [19] => 你
//     [20] => 呢
//     [21] => ?
// )

编辑

这个解决方案是否足够令人满意?

$words = explode(' ', "I want to eat 我要吃飯 , you ? 你呢 ?");
$output = array();

foreach ($words as $word) {
    $tokens = mb_split('\s', $word, 1);
    $output = array_merge($output, $tokens);
}

print_r($output);

// Array
// (
//     [0] => I
//     [1] => want
//     [2] => to
//     [3] => eat
//     [4] => 我要吃飯
//     [5] => ,
//     [6] => you
//     [7] => ?
//     [8] => 你呢
//     [9] => ?
// )
于 2013-04-03T20:23:47.623 回答