1

我需要这样的 utf-8 文本:

“Bára, ta která má hezké oči. To je, ale nepříčetně nehorázné!”

拆分为单词和标点数组,如下所示:

Array (
    [0] => Bára
    [1] => ,
    [2] => ta
    [3] => která
    [4] => má
    [5] => hezké
    [6] => oči
    [7] => .
    [8] => To
    [9] => je
    [10] => ,
    [11] => ale
    ...
)

我在这里尝试了一些示例,但都不适用于 utf8 文本(á 或 ě 上的拆分文本)。

4

2 回答 2

1

取自php.net 评论(稍作修改):

function mb_str_split( $string ) {
  $split = preg_split('/\b([\(\).,\-\',:!\?;"\{\}\[\]„“»«‘\r\n]*)/u', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  return array_filter($split, 'filter');
}

function filter($val) {
  if (trim($val) != '') {
    return trim($val);
  }
  return false;
}

测试:

print_r(mb_str_split("Bára, ta která má hezké oči. To je, ale nepříčetně nehorázné!"));

/*
Array
(
    [0] => Bára
    [1] => ,
    [3] => ta
    [5] => která
    [7] => má
    [9] => hezké
    [11] => oči
    [12] => .
    [14] => To
    [16] => je
    [17] => ,
    [19] => ale
    [21] => nepříčetně
    [23] => nehorázné
    [24] => !
)
*/
于 2012-06-15T10:04:57.080 回答
1

这个怎么样:

$string   = 'Bára, ta která má hezké oči. To je, ale nepříčetně nehorázné!';
$rawSplit = preg_split('/\b/u', $string, 0, PREG_SPLIT_NO_EMPTY);
$result   = array_filter( array_map( function($el) { 
  return trim($el); 
}, $rawSplit));
于 2012-06-15T10:05:50.093 回答