PHP将UTF8文本拆分为单词和标点符号

时间:2012-06-15 09:47:32

标签: php regex utf-8 preg-split

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

  

“Bára,takterámáhezkéoči。to je,alenepříč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文本上工作(在á上分割文本,或者ě)。

2 个答案:

答案 0 :(得分:1)

取自php.net comment(稍加修改):

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] => !
)
*/

答案 1 :(得分: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));