gpt4 book ai didi

php - 正则表达式,截断以缩短文章并用省略号代替标点符号?

转载 作者:搜寻专家 更新时间:2023-10-31 22:12:42 24 4
gpt4 key购买 nike

我正在尝试截断 PHP 中的描述字段,并在适当的位置插入省略号,以便用户可以单击并了解更多信息。所以我从一个字段中检索了一些字符:

LEFT(html,340) as descr

然后设置变量...

$desc= $a['descr'];

现在是困难的部分......我想在 sting 中找到最后的标点符号,然后将它们替换为“...”,因为我认为在随机位置中断一个句子会非常难看。然后,如果句子太长且没有标点符号,或者如果结果变得太短,我实际上会从末尾开始替换第一个找到的空格。

$desc1=preg_replace('/([\.\-_,:].*)$/','...',$desc);

$desc=strlen(strlen($desc1)>170&&340>strlen($desc1))?$descr1:
preg_replace('/(\s.*)$/','...',substr($desc,0,300));

这是我到目前为止尝试过的方法,但问题是它在完全随机的位置断开字符串,而不是从最后一个标点符号的位置断开。嗯嗯

当两个标点符号一起找到时也是无能为力的。最后,我只想替换前面有空格的破折号。但我似乎无法弄清楚如何做这些事情,我的意思是如何将它们放在一起......

如果您能就上述任何一点提出建议,我将很高兴。

好吧,我就是这样解决的

$desc1 = preg_replace('/[.,!:_]+[^.,!:_]*$/', '... ', $desc);
$desc=(strlen($desc1)<170)?preg_replace('/[\s]+[^\s]*$/', '... ', $desc) : $desc1;

最佳答案

这是我的解决方案:

<?php

define("STR_LEN_THRESHOLD", 400); //Define the threshold in characters.

$punctuation = ".,!:_"; //Define punctuation marks
$string = "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus";
while (strlen($string) > STR_LEN_THRESHOLD) { //While string is too long
$string = preg_replace("/[$punctuation][^$punctuation]+$/", "", $string); //Remove the last sentence
}
echo $string . "..."; //After enough was removed, add ...

这个输出:

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae...

关于php - 正则表达式,截断以缩短文章并用省略号代替标点符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com