可能重复:
从数组中提取固定数量的字符,仅完整单词
当它们的长度超过20个字符时,我需要截断字符串。言语必须始终保持在一起,这样:
跟我的小朋友打个招呼。
变成这个:
跟我打个招呼...
代替这个:
跟我打个招呼...
我基于一个非常老的线程中的注释设置了此功能。这个正则表达式的问题是它删除了句子的最后一个单词(当有两个或更多单词时)。
function gen_string($string,$min=20) {
$new = preg_replace('/\s+?(\S+)?$/','',substr($string,0,$min));
if(strlen($new) < strlen($string)) $new .= '…';
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 .= '…';
return $sub;
}
Run Code Online (Sandbox Code Playgroud)
您可能只是wordwrap()为此而使用,对吗?
strstr(wordwrap($string, $min), "\n", true)
Run Code Online (Sandbox Code Playgroud)
比使用正则表达式更快,更干净。
| 归档时间: |
|
| 查看次数: |
2997 次 |
| 最近记录: |