7

我正在尝试删除<p>CKEditor 插入到描述框中的所有空标签,但它们似乎都各不相同。可能性似乎是:

<p></p>

<p>(WHITESPACE)</p>

<p>&nbsp;</p>

<p><br /></p>

<p>(NEWLINE)&nbsp;</p>

<p>(NEWLINE)<br /><br />(NEWLINE)&nbsp;</p>

有了这些可能性,段落之间可以有任意数量的空白&nbsp;<br />标签,并且在一个段落中可以有每种类型的一些。

我也不确定这个<br />标签,从我所见它可能是<br />,<br/><br>.

我搜索了一个类似的答案,但在我看到的所有答案中,它们似乎都只满足其中一种情况,而不是一次。我想简单来说我要问的是,是否有一个正则表达式可以用来<p>从一些没有任何字母数字文本或符号/标点符号的 HTML 中删除所有标签?

4

2 回答 2

17

好吧,与我不使用正则表达式解析 HTML 的建议相冲突,我编写了一个正则表达式来做到这一点:

"#<p>(\s|&nbsp;|</?\s?br\s?/?>)*</?p>#"

这将正确匹配:

<p></p>

<p> </p> <!-- ([space]) -->

<p> </p> <!-- (That's a [tab] character in there -->

<p>&nbsp;</p>

<p><br /></p>

<p>
&nbsp;</p>

<p>
<br /><br />
&nbsp;</p>

它能做什么:

# /                --> Regex start
# <p>              --> match the opening <p> tag
# (                --> group open.
#   \s             --> match any whitespace character (newline, space, tab)
# |                --> or
#   &nbsp;         --> match &nbsp;
# |                --> or
#   </?\s?br\s?/?> --> match the <br> tag
# )*               --> group close, match any number of any of the elements in the group
# </?p>            --> match the closing </p> tag ("/" optional)
# /                --> regex end.
于 2013-01-10T15:12:03.780 回答
3

<p>选择的答案很好,但如果标签定义了内联样式属性,则它不起作用,例如<p style="font-weight:bold">.

与此匹配的正则表达式将是:

#<p[^>]*>(\s|&nbsp;|</?\s?br\s?/?>)*</?p>#
于 2015-05-06T12:34:26.577 回答