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);
}