将字符串切割为固定数量字符的简单(且快速)方法是preg_replace
:
$string = 'Стихи похожи на людей: помнят прошлое и ничего не знают о будущем, хотят жить вечно, a страница уже перелистывается.';
$excerpt = preg_replace('/^(.{1,110})\s.*$/u', '$1...', $string);
echo $excerpt;
Output:
Стихи похожи на людей: помнят прошлое и ничего не знают о будущем, хотят жить вечно, a страница уже...
正则表达式的工作原理是查找一定数量的字符^(.{1,110})\s
(从 1 到 110)从字符串的开头到空格字符。由于量词是贪婪的,因此它需要尽可能多的字符。这些角色被捕获为一组。然后将字符串的其余部分匹配.*$
,整个字符串被第一个捕获组和三个捕获组替换.'s
($1...
),根据需要仅给出第一部分。这u
正则表达式上的标志意味着它将正确计算 unicode 字符。要调整摘录的长度,只需更改110
到您需要的任何长度。
Regex101 演示 https://regex101.com/r/kcA7gd/9
Edit
还可以修改正则表达式以去掉任何非单词字符(这样你就不会得到the quick brown fox,...
)通过修改它来坚持捕获组的最后一个字符是word
字符,然后允许以下字符为非单词字符:
$string = 'Стихи похожи на людей: помнят прошлое и ничего не знают о будущем, хотят жить вечно, a страница уже перелистывается.';
$excerpt = preg_replace('/^(.{1,23}\w)\W.*$/u', '$1...', $string);
echo $excerpt;
Output:
Стихи похожи на людей...
更新了演示 https://regex101.com/r/kcA7gd/10