以下是中文的示例字符串:
"最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "
如何将其拆分为一个看起来像这样的数组?:
Array
(
[0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
[1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
)
我尝试过但失败了:
$array = mb_split('。', $string);
echo "<pre>";
print_r($array);
我明白了:
Array
(
[0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
)
P.S。字符集是GB18030。
我发现了更多信息。中国时期被称为句号。 html转义符为。
和。
。 GB18030十六进制字节为a1a3。 Unicode字符是'IDEOGRAPHIC FULL STOP'(U + 3002)。我怎样才能使用其中任何一个来实现我的目标?
答案 0 :(得分:0)
试试这个:
$array = explode(chr(227), $string);
修复explode
:
foreach($array as $part) {
echo str_replace(array(chr(128).chr(130)), '', $part);
echo '<br>';
}
答案 1 :(得分:0)
你怎么试试
$ array = explode('。',$ string);
这对我使用命令行很有用。
输出:
排列
(
[0] =&gt;最初,上帝创造了天地
[1] =&gt; 2大地混沌苍茫,深渊的表面一片黑暗
[2] =&gt;
)
答案 2 :(得分:0)
我需要在gb18030中执行此操作的原因是我使用的库(dedesplit)在转换为utf-8时不起作用。该库是一个中文单词分段器。我联系了开发人员,他告诉我一个新的工作在utf-8(http://www.itgrass.com/phpanalysis/index.html)。我已对它进行了测试,并以中文句号(或“句号”)作为分隔符正确地展开段落。
P.S。在找到这个新库之前,我决定编写自己的爆炸函数。我认为这可能有用,但我做了零测试。
答案 3 :(得分:0)
最好的是preg_split()
和/u
(UTF8)选项,例如:
$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] =&gt; string(3)“日”[1] =&gt; string(3)“,”[2] =&gt; string(3)“に”[3] =&gt; string(3)“,”... [11] =&gt; string(3)“ご”}
v2 = array(6){[0] =&gt; string(3)“日”[1] =&gt; string(3)“に”[2] =&gt; string(3)“本”[3] =&gt; string(6)“ほん”[4] =&gt; string(3)“语”[5] =&gt; string(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);
现在,使用negative look ahead,这正是您所需要的(!)。
array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 "
[1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "
}