我从API中获得了大量内容,就像这样:
Lorem <div class="highlighted">ipsum dolor</div>
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur
我想从此内容中显示大约10个单词。而且我也不想错过<div class="highlighted">ipsum dolor</div>
部分。我的意思是div
和class="highlighted"
不应删除。
我尝试了此功能:
function getPartialContent($content, $words_number)
{
$no_tags_content = preg_replace("/\r|\n/", "", html_entity_decode(filter_var($content, FILTER_SANITIZE_STRING)));
$words = explode(" ", $no_tags_content);
$result = implode(" ", array_splice($words, 0, $words_number));
return $result;
}
唯一的问题是此函数首先删除所有html标签。
如果我不使用preg_replace
删除html标签,结果将是这样的(div未关闭):
Lorem sed do eiusmod tempor incididunt is that this <div class="highlighted">ipsum
这不是我想要的。
我希望结果是带有封闭标签或根本没有任何标签。 div
中通常有一个或两个单词。结果中的单词数量不是那么重要。我只希望它简短些,大约10到15个字。
答案 0 :(得分:0)
您可以尝试这样的事情:
$rgxp = '/^(\W*(<[^>]+>\W*)?\w+(\W*<[^>]+>)?\W*){10,15}/';
preg_match($rgxp, $text, $mtch);
echo "\n",$mtch[0], "\n";
展开:
$rgxp = '/
^ # start of line
( # group to quantify
\W* # ignore space & punctuation
(<[^>]+>\W*)? # optional opening tag group
\w+ # the words to count
(\W*<[^>]+>)? # optional closing tag group
\W* # ignore space & punctuation
) {10,15} # quantifier
/x';