PHP将文本限制为x字数或第一段,以较短者为准

PHP将文本限制为x字数或第一段,以较短者为准,php,html,magento,Php,Html,Magento,我从系统(Magento)输出了类似以下字符串(产品描述)的内容: Lorem ipsum dolor sit amet,是一位杰出的献身者。佩伦茨克 我们坐在狮子座上,我们坐在拉齐尼亚广场上。南拉奥里特 温文尔雅的厄洛斯·奎斯·朗卡斯。库拉比图尔·米多洛,在, 猫科动物前体。佩纳提布和马格尼斯群岛自然社会 临产的蒙特斯,红毛猴多奈克·莫利斯·维塔·多洛欧盟 维韦拉。侵权行为赔偿金,赔偿金 欧盟。前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭

我从系统(Magento)输出了类似以下字符串(产品描述)的内容:

Lorem ipsum dolor sit amet,是一位杰出的献身者。佩伦茨克 我们坐在狮子座上,我们坐在拉齐尼亚广场上。南拉奥里特 温文尔雅的厄洛斯·奎斯·朗卡斯。库拉比图尔·米多洛,在, 猫科动物前体。佩纳提布和马格尼斯群岛自然社会 临产的蒙特斯,红毛猴

多奈克·莫利斯·维塔·多洛欧盟 维韦拉。侵权行为赔偿金,赔偿金 欧盟。前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭前庭 洛雷姆。在权杖中的空塔。毛里斯·森佩尔 马萨-欧盟-尼西-鲁特鲁姆会议。拉齐尼亚前庭 泰勒斯,我是帝国主义者

但是,我只想得到前x个单词,或者最多到第一个段落(不幸的是,我们使用的系统使用双


标记创建段落)

我使用answer创建了以下内容:

echo preg_replace( '/((\w+\W*){'.$numberOfWords.'}(\w+))(.*)/', '${1}', $processor->filter($description) );
$descriptionStripped =   preg_replace( '/((\w+\W*){'.$numberOfWords.'}(\w+))(.*)/', '${1}', $processor->filter($description) );
$descriptionFirstPara = explode("<br><br>", $descriptionStripped);
echo $descriptionFirstPara[0];

然而,这并不包括段落。我试着在上面找到答案,但不幸的是我没能做到这一点(只是返回了完整的不受信任的字符串-可能是因为我缺乏正则表达式功能!)这里有人能帮我吗?

好的,所以如果你需要(第一段)与(n个单词)之间的最短距离,你必须选择第一段,然后将其限制为n个单词。比如:

$first_p = preg_replace(
    '/^(.*?)<br><br>.*$/s', // Not tested, but it should be something like that
    '\\1', 
    $processor->filter($description)
);

希望能有所帮助。

只需执行以下操作即可解决此问题:

echo preg_replace( '/((\w+\W*){'.$numberOfWords.'}(\w+))(.*)/', '${1}', $processor->filter($description) );
$descriptionStripped =   preg_replace( '/((\w+\W*){'.$numberOfWords.'}(\w+))(.*)/', '${1}', $processor->filter($description) );
$descriptionFirstPara = explode("<br><br>", $descriptionStripped);
echo $descriptionFirstPara[0];
$descriptionStripped=preg_replace('/(\w+\w*){.$numberOfWords.}(\w+)(.*/'),'${1}',$processor->filter($description));
$descriptionFirstPara=爆炸(“

”,$DescriptionStriped); echo$descriptionFirstPara[0];
谢谢,这非常接近,不过在本段末尾,它去掉了结尾“.”如果只显示
$first\p
?我想这可能是第二部分(你原来的正则表达式)