可能重复:
Extract a fixed number of chars from an array, just full words
我需要在长度超过20个字符时截断字符串。单词必须始终保持在一起,以便:
向我的小朋友问好。
成为这个:
向我问好...
而不是:
向我的小伙伴问好......
我根据非常old thread的评论来设置此功能。这个正则表达式的问题在于它删除了句子的最后一个单词(当有2个单词或更多单词时)。
function gen_string($string,$min=20) {
$new = preg_replace('/\s+?(\S+)?$/','',substr($string,0,$min));
if(strlen($new) < strlen($string)) $new .= '…';
return $new;
}
有人可以帮我正式使用正则表达式吗?谢谢!
Alasdair的解决方案(有少量修改)
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 .= '…';
return $sub;
}
答案 0 :(得分:5)
你可能只是使用wordwrap()
,对吗?
strstr(wordwrap($string, $min), "\n", true)
它比使用正则表达式更快更干净。
答案 1 :(得分:1)
function gen_string($string,$max=20)
{
$tok=strtok($string,' ');
$string='';
while($tok!==false && strlen($string)<$max)
{
if (strlen($string)+strlen($tok)<=$max)
$string.=$tok.' ';
else
break;
$tok=strtok(' ');
}
return trim($string).'...';
}
查看实际操作:CodePad
或者,使用特殊字符(必须安装多字节字符串函数):
function gen_string($string,$max=20)
{
$tok=strtok($string,' ');
$string='';
while($tok!==false && mb_strlen($string)<$max)
{
if (mb_strlen($string)+mb_strlen($tok)<=$max)
$string.=$tok.' ';
else
break;
$tok=strtok(' ');
}
return trim($string).'...';
}