Php 如何使用“分解/mb_split/preg_”将中文字符串拆分为一个“"。&引用;(中文句号)作为分隔符?

Php 如何使用“分解/mb_split/preg_”将中文字符串拆分为一个“"。&引用;(中文句号)作为分隔符?,php,Php,以下是一个中文字符串示例: "最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 " 如何将其拆分为如下所示的数组: Array ( [0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 [1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 ) 我曾尝试过,但失败了: $array = mb_split('。', $string); echo

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

"最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "
如何将其拆分为如下所示的数组:

Array
(
    [0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
    [1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 
)
我曾尝试过,但失败了:

$array = mb_split('。', $string);
echo "<pre>";
print_r($array);
p、 字符集为GB18030

我找到了更多信息。中国时期被称为句号。html转义是
和#12290
。GB18030十六进制字节为a1a3。Unicode字符是“表意句号”(U+3002)。我如何使用这两种方法来实现我的目标?

试试以下方法:

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

更新: 要修复
分解的字符,请执行以下操作:

 $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)
foreach($array作为$part){
echo str_替换(数组(chr(128).chr(130)),“,$part);
回声“
”; }
试试看怎么样

$array=explode('.',$string)

这对我使用命令行是有效的

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

)

我在gb18030中需要这样做的原因是我使用的库(dedesplit)在转换为utf-8时无法工作。图书馆是一个中文分词器。我联系了开发人员,他告诉我有一个新的可以在utf-8()中工作。我对它进行了测试,它正确地将段落分解为中文句号(或“句号”)作为分隔符


p、 在找到这个新库之前,我决定编写自己的explode函数。我认为这可能有效,但我进行了零测试。

最好是使用
/u
(UTF8)选项进行
preg_split()
,例如:

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

$array  = preg_split('/。(?!\s*$)/u',$string);
所以,不完美。。。但作为一种常规表达,您可以根据自己的需要进行调整:

精确解 现在,有了a,这正是你需要的(!)


您是否设置了
mb_regex_编码('UTF-8')
mb_内部编码(“UTF-8”)
mb_分割之前('.',$string)?根据你的建议,我尝试了:mb_regex_编码('UTF-8');mb_内部_编码(“UTF-8”);我还尝试了mb_regex_编码('gb18030');mb_内部_编码(“gb18030”);在mb_分割()之前;谢谢,但不要雪茄。这给了我这个结果:
Array{[0]=>最初 , 上帝 创造 了 天地 。 2.大地 混     [1] => � 苍茫 , 深渊 的 表面 一 片 黑暗 。}不幸的是,我还没有找到任何可以解决“explode”字符中此问题的方法。一个不完美的解决方案是对更新时显示为“?”的字符进行str_替换。这给了我:Array([0]=>最初 , 上帝 创造 了 天地 2.大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 (这可能与我的文件是GB18030编码有关吗?
$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 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 " 
}