在不截断单词的情况下截断php中的字符串

And*_* SK 1 php regex string

可能重复:
从数组中提取固定数量的字符,仅完整单词

当它们的长度超过20个字符时,我需要截断字符串。言语必须始终保持在一起,这样:

跟我的小朋友打个招呼。

变成这个:

跟我打个招呼...

代替这个:

跟我打个招呼...

我基于一个非常老的线程中的注释设置了此功能。这个正则表达式的问题是它删除了句子的最后一个单词(当有两个或更多单词时)。

function gen_string($string,$min=20) {
    $new = preg_replace('/\s+?(\S+)?$/','',substr($string,0,$min));
    if(strlen($new) < strlen($string)) $new .= '&hellip;';
    return $new;
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我处理正则表达式吗?谢谢!

解决方案通过麦金太尔(少数润饰)

function gen_string($string,$max=20) {
    $tok = strtok($string,' ');
    $sub = '';
    while($tok !== false && mb_strlen($sub) < $max) {
        if(strlen($sub) + mb_strlen($tok) <= $max) {
            $sub .= $tok.' ';
        } else {
            break;
        }
        $tok = strtok(' ');
    }
    $sub = trim($sub);
    if(mb_strlen($sub) < mb_strlen($string)) $sub .= '&hellip;';
    return $sub;
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*rdt 5

您可能只是wordwrap()为此而使用,对吗?

strstr(wordwrap($string, $min), "\n", true)
Run Code Online (Sandbox Code Playgroud)

比使用正则表达式更快,更干净。