如何爆炸/mb_split/preg_split以"。"(中国句点)作为分隔符的中文字符串?



下面是一个中文字符串示例:

"最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "

如何将其拆分为如下所示的数组?

Array
(
    [0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
    [1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 
)

我尝试过并失败了:

$array = mb_split('。', $string);
echo "<pre>";
print_r($array);

我明白这个:

Array
(
    [0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
)

附言字符集GB18030。

我找到了更多信息。中国时期被称为句号。html 转义是&#12290;&#x3002;的。十六进制字节GB18030是 a1a3。Unicode 字符是"表意句号"(U+3002)。我如何使用其中任何一个来实现我的目标?

你试试怎么样

$array = 爆炸('。', $string);

这使用命令行对我有用。

输出:数组( [0] => 最初 , 上帝 创造 了 天地 [1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 [2] =>
)

试试这个:

$array = explode(chr(227), $string);

更新:

要修复explode的字符:

foreach($array as $part) {
    echo str_replace(array(chr(128).chr(130)), '', $part);
    echo '<br>';
}

我需要在 gb18030 中执行此操作的原因是,我使用的库(dedesplit)在转换为 utf-8 时不起作用。该库是一个中文分词器。我联系了开发人员,他告诉我一个新的可以在utf-8(http://www.itgrass.com/phpanalysis/index.html)中工作。我已经测试了它,它正确地分解了以中国句号(或"句号")作为分隔符的段落。

附言在找到这个新库之前,我决定编写自己的分解函数。我认为这可能奏效了,但我做了零测试。

最好的办法是使用/u(UTF8)选项preg_split(),例如:

 $s = "日、に、本、ほん、語、ご";
 $v1 = preg_split('/(?<!^)(?!$)/u', $s); // for multibyte str_split($list)
 // same as $v1=preg_split('//u', $s);array_pop($v1);array_shift($v1);
 $v2 = preg_split('/、/u', $s); // for multibyte explode("、",$list)

结果在

    v1 = array(12) { [0]=> string(3) "日" [1]=> string(3) "、" [2]=> string(3)
  • "に" [3]=> string(3) "、" ...[11]=> 字符串(3) "ご" }

  • v2 = array(6) { [0]=> 字符串(3) "日" [1]=> 字符串(3) "に" [2]=> 字符串(3) "本" [3]=> 字符串(6) "ほん" [4]=> 字符串(3) "
  • 語" [5]=> 字符串(3) "ご" }

<小时 />

与您的示例一起使用,

$s = "最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 ";
$array  = preg_split('/。/u',$s);
var_dump($array);

结果

array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 " 
           [1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 " 
           [2]=> string(1) " " 
} 

所以,不完美...但作为常规表达式,您可以根据自己的需求进行调整:

精确的解决方案

$array  = preg_split('/。(?!s*$)/u',$string);

现在,展望未来,这完全是你所需要的(!

array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 " 
           [1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 " 
} 

最新更新