2
$theExcerpt = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis'

$theExcerptAppend = (strlen($theExcerpt) > 156) ? '...' : '';
$theExcerpt = preg_replace('/\s+?(\S+)?$/', '', substr($theExcerpt, 0, 156));
$theExcerpt .= $theExcerptAppend;

只要输入短语长度超过 156 个字符,脚本就可以正常工作。但是,当长度小于 156 时(就像这里的 154 一样),被丢弃的最后一个单词,即使包括单词在内的字符串仍然小于 156。

注意:我不希望字符串在单词中间终止,但是如果包含的单词不超过strlen值156,则应该包含。

4

4 回答 4

5

使用substrstrrpos

if (strlen($theExcerpt) > 156) {
    $theExceprt = substr($theExcerpt, 0, 156);
    $theExcerpt = substr($theExcerpt, 0, strrpos($theExcerpt, ' '));        
    $theExcerpt .= '...';
}
于 2013-03-29T14:31:51.717 回答
1

我认为有人发布了指向副本的链接。接受的解决方案是:

/^.{1,156}\b/

现在,这总是少于 156 个字符。如果第 156 个字符在一个单词的中间,它将剪切最后一个单词。但是,可以进行一些更改以产生相反的效果。

注意:只需使用此正则表达式将 preg_match 应用于您的字符串。

编辑:
相反的效果(超过 156 个字符才能得到最后一个字):

/^.{1,155}(.)?(?(1).*?\b)/
于 2013-03-29T14:27:16.427 回答
0

怎么样 :

$theExcerpt = preg_replace('/(?=.{156})\s+?(\S+)?$/', '', substr($theExcerpt, 0, 156));

仅当句子长度超过 156 个字符时才会处理该句子。

于 2013-03-29T14:23:06.087 回答
0

尝试以下操作:

$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus egestas, lacus non dapibus placerat, justo mi adipiscing libero, id ultrices neque metus nec lorem. Quisque vitae dui facilisis ligula tristique dapibus. Ut egestas ligula in tortor facilisis pharetra id vitae eros. Donec commodo laoreet nisi porttitor tincidunt. Donec tortor enim, pharetra in accumsan sit amet, scelerisque ac massa. Morbi massa erat, mattis non faucibus a, feugiat imperdiet lectus. Praesent tincidunt libero id enim cursus non sagittis nisl accumsan. Maecenas massa lorem, consectetur ut rhoncus ac, ullamcorper a tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sit amet eros.';

$limit = 156;
$output = preg_replace('/^(.{'.$limit.'})(\S|\s|\w+)(.*)/', '$1$2 ...', $string);

echo $output;
于 2013-03-29T14:26:28.677 回答