Php 基于长度拆分MB字符串
我有一个特殊语言字符的字符串Php 基于长度拆分MB字符串,php,regex,string,function,Php,Regex,String,Function,我有一个特殊语言字符的字符串 先秦兩漢先秦兩漢先秦兩漢漢先秦兩漢漢先秦兩漢( 243071) 我的要求是使用php将其设置为数组,以防字符限制超过我的要求。比如超过15个字符 为此,我已经试过了 if(mb_strlen($string) > 15){ $seed = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY); } 但它正在崩溃。并不是所有的箱子都破了,但是一个箱子有35个字符 我尝试过的另一种方法是使用此函数:-
先秦兩漢先秦兩漢先秦兩漢漢先秦兩漢漢先秦兩漢( 243071)
我的要求是使用php将其设置为数组,以防字符限制超过我的要求。比如超过15个字符
为此,我已经试过了
if(mb_strlen($string) > 15){
$seed = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
}
但它正在崩溃。并不是所有的箱子都破了,但是一个箱子有35个字符
我尝试过的另一种方法是使用此函数:-
function word_chunk($str, $len = 76, $end = "||") {
$pattern = '~.{1,' . $len . '}~u'; // like "~.{1,76}~u"
$str = preg_replace($pattern, '$0' . $end, $str);
return rtrim($str, $end);
}
请帮助并理解,我只需要MB字符的帮助这将在每10次“扩展图形集簇”(由Wiktor在评论中建议)后分割您的字符串
preg_split(“~.{10}\K~u',$string)
将用于示例字符串,但对于超出示例字符串的情况,\X
在处理unicode时更加健壮
发件人:
可以考虑\x的Unicode版本的点。但是有一个区别:\X始终匹配换行符,而点不匹配换行符,除非启用点匹配换行符匹配模式
这是\K
重新启动完整字符串匹配,因此拆分中不会丢失任何字符
下面是一个演示,其中$len=10
代码:()
输出:
array (
0 => '先秦兩漢先秦兩漢先秦',
1 => '兩漢漢先秦兩漢漢先秦',
2 => '兩漢( 243071',
3 => ')',
)
实施:
function word_chunk($str,$len){
return preg_split('~\X{'.$len.'}\K~u',$str);
}
虽然
preg_split()
可能比preg_match_all()
稍慢,但一个优点是preg_split()
提供了所需的一维数组preg\u match\u all()
生成一个多维数组,通过该数组,您只需访问[0]
子数组的元素。向我们显示一个示例输入字符串(或三个)和预期输出。实际上,我不能,因为它是另一种语言,我不知道内容的机密程度。我不会读那种语言,我只是一个你知道的编码员:)你在寻找一种多字节的等价物吗?比如?我们怎样才能重现你的问题,理解你的预期结果呢?这是关于主题问题的标准。不是换行,而是str_split,相当于str_split($str,3);但是MB不能给我范围参数$seed=preg_split('//u',$string,-1,preg_split_NO_EMPTY);--区别是什么,请解释一下?这将在每个mb字符上分割:我看到了regex的测试网站,我可以在那里测试我的实际文本吗,我如何知道我的文本是否工作正常?请稍等,你很快,让我测试一下我很有信心它能工作,让我最后在我的开发实例上测试一下
array (
0 => '先秦兩漢先秦兩漢先秦',
1 => '兩漢漢先秦兩漢漢先秦',
2 => '兩漢( 243071',
3 => ')',
)
function word_chunk($str,$len){
return preg_split('~\X{'.$len.'}\K~u',$str);
}