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 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "
}