如何在不丢失php的html标签的情况下获得大文本的一部分?

时间:2018-12-30 16:16:48

标签: php html regex

我从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>部分。我的意思是divclass="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个字。

1 个答案:

答案 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';