Here is an example string in Chinese:
下面是一个中文示例字符串:
"最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "
How can I split this into an array that looks like this?:
如何将它分割成这样的数组?
Array
(
[0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
[1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
)
I have tried and failed with:
我尝试过,但失败了:
$array = mb_split('。', $string);
echo "<pre>";
print_r($array);
I get this:
我得到了这个:
Array
(
[0] => 最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。
)
p.s. The charset is GB18030.
这个字符集是GB18030。
I found more info. The Chinese period is called a full stop. The html escapes are 。
and 。
. The GB18030 hex bytes are a1a3. The Unicode Character is 'IDEOGRAPHIC FULL STOP' (U+3002). How can I use either of these to accomplish my goal?
我发现更多的信息。中国的这段时期被称为“句号”。html转义是。和& # x3002;。GB18030十六进制字节为a1a3。Unicode字符是“IDEOGRAPHIC FULL STOP”(U+3002)。我该如何利用这些来实现我的目标呢?
4 个解决方案
#1
0
How about you just try
你试试怎么样?
$array = explode('。', $string);
$array =爆炸(' . ',$string);
This worked for me using commandline.
这对我使用命令行很有用。
Output: Array ( [0] => 最初 , 上帝 创造 了 天地 [1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 [2] =>
)
输出:阵列([0]= >最初,上帝创造了天地[1]= > 2大地混沌苍茫,深渊的表面一片黑暗[2]= >)
#2
0
Try this:
试试这个:
$array = explode(chr(227), $string);
Update:
To fix the characters of explode
:
修正爆炸的特征:
foreach($array as $part) {
echo str_replace(array(chr(128).chr(130)), '', $part);
echo '<br>';
}
#3
0
My reason for needing to do this in gb18030 is that the library I was using (dedesplit) wouldn't work when converted to utf-8. The library is a Chinese word segmenter. I contacted the developer and he informed me of a new one that does work in utf-8 (http://www.itgrass.com/phpanalysis/index.html). I have tested it and it properly explodes the paragraphs with the Chinese period (or 'full stop') as the delimiter.
我在gb18030中需要这样做的原因是,我使用的库在转换为utf-8时不起作用。图书馆是一个中文的字节段。我联系了开发人员,他告诉我一个在utf-8 (http://www.itgrass.com/phpanalysis/index.html)工作的新软件。我已经对它进行了测试,它正确地利用了中国句号(或“full stop”)作为分隔符。
p.s. Before finding this new library, I had decided to write my own explode function. I think that may have worked, but I did zero testing.
在找到这个新图书馆之前,我决定写我自己的爆炸函数。我想这可能行得通,但我做了零测试。
#4
0
The best thing is preg_split()
with the /u
(UTF8) option, example:
最好的方法是使用/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)
Results in
结果
-
v1 = array(12) { [0]=> string(3) "日" [1]=> string(3) "、" [2]=> string(3) "に" [3]=> string(3) "、" ... [11]=> string(3) "ご" }
v1 = array(12){[0]=>字符串(3)“日”[1]= >字符串(3)","[2]=>字符串(3)“に”[3]= >字符串(3)”,“……[11]= >字符串(3)“ご”}
-
v2 = array(6) { [0]=> string(3) "日" [1]=> string(3) "に" [2]=> string(3) "本" [3]=> string(6) "ほん" [4]=> string(3) "語" [5]=> string(3) "ご" }
v2 =数组(6){[0]=>字符串(3)“日”[1]= >字符串(3)“に”[2]= >字符串(3)“本”[3]= >字符串(6)“ほん”[4]= >字符串(3)“語”[5]= >字符串(3)“ご”}
Using with your example,
使用与你的例子,
$s = "最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 ";
$array = preg_split('/。/u',$s);
var_dump($array);
Results
结果
array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 "
[1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 "
[2]=> string(1) " "
}
So, not perfect... But as a regular expresion, you can adapt it to your needs:
所以,不完美……但是作为一种常规的解释,你可以根据你的需要来调整它:
Exact solution
$array = preg_split('/。(?!\s*$)/u',$string);
now, with a negative look ahead, that is exctly what you need (!).
现在,带着消极的展望,这是你所需要的(!)
array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 "
[1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "
}
#1
0
How about you just try
你试试怎么样?
$array = explode('。', $string);
$array =爆炸(' . ',$string);
This worked for me using commandline.
这对我使用命令行很有用。
Output: Array ( [0] => 最初 , 上帝 创造 了 天地 [1] => 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 [2] =>
)
输出:阵列([0]= >最初,上帝创造了天地[1]= > 2大地混沌苍茫,深渊的表面一片黑暗[2]= >)
#2
0
Try this:
试试这个:
$array = explode(chr(227), $string);
Update:
To fix the characters of explode
:
修正爆炸的特征:
foreach($array as $part) {
echo str_replace(array(chr(128).chr(130)), '', $part);
echo '<br>';
}
#3
0
My reason for needing to do this in gb18030 is that the library I was using (dedesplit) wouldn't work when converted to utf-8. The library is a Chinese word segmenter. I contacted the developer and he informed me of a new one that does work in utf-8 (http://www.itgrass.com/phpanalysis/index.html). I have tested it and it properly explodes the paragraphs with the Chinese period (or 'full stop') as the delimiter.
我在gb18030中需要这样做的原因是,我使用的库在转换为utf-8时不起作用。图书馆是一个中文的字节段。我联系了开发人员,他告诉我一个在utf-8 (http://www.itgrass.com/phpanalysis/index.html)工作的新软件。我已经对它进行了测试,它正确地利用了中国句号(或“full stop”)作为分隔符。
p.s. Before finding this new library, I had decided to write my own explode function. I think that may have worked, but I did zero testing.
在找到这个新图书馆之前,我决定写我自己的爆炸函数。我想这可能行得通,但我做了零测试。
#4
0
The best thing is preg_split()
with the /u
(UTF8) option, example:
最好的方法是使用/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)
Results in
结果
-
v1 = array(12) { [0]=> string(3) "日" [1]=> string(3) "、" [2]=> string(3) "に" [3]=> string(3) "、" ... [11]=> string(3) "ご" }
v1 = array(12){[0]=>字符串(3)“日”[1]= >字符串(3)","[2]=>字符串(3)“に”[3]= >字符串(3)”,“……[11]= >字符串(3)“ご”}
-
v2 = array(6) { [0]=> string(3) "日" [1]=> string(3) "に" [2]=> string(3) "本" [3]=> string(6) "ほん" [4]=> string(3) "語" [5]=> string(3) "ご" }
v2 =数组(6){[0]=>字符串(3)“日”[1]= >字符串(3)“に”[2]= >字符串(3)“本”[3]= >字符串(6)“ほん”[4]= >字符串(3)“語”[5]= >字符串(3)“ご”}
Using with your example,
使用与你的例子,
$s = "最初 , 上帝 创造 了 天地 。 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 ";
$array = preg_split('/。/u',$s);
var_dump($array);
Results
结果
array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 "
[1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 "
[2]=> string(1) " "
}
So, not perfect... But as a regular expresion, you can adapt it to your needs:
所以,不完美……但是作为一种常规的解释,你可以根据你的需要来调整它:
Exact solution
$array = preg_split('/。(?!\s*$)/u',$string);
now, with a negative look ahead, that is exctly what you need (!).
现在,带着消极的展望,这是你所需要的(!)
array(3) { [0]=> string(36) "最初 , 上帝 创造 了 天地 "
[1]=> string(61) " 2 大地 混沌 苍茫 , 深渊 的 表面 一 片 黑暗 。 "
}