如果之前或之后没有文字,我该如何删除?DOMxpath还是正则表达式?

lau*_*kok 5 html php regex xpath domxpath

<br/>如果之前或之后没有文字,我该如何删除?

例如,

<p><br/>hello</p>
<p>hello<br/></p>
Run Code Online (Sandbox Code Playgroud)

他们应该像这样重写,

<p>hello</p>
<p>hello</p>
Run Code Online (Sandbox Code Playgroud)

我应该使用DOMxpath还是正则表达式会更好?

(注意:我有一篇关于先前使用DOMxpath 删除的帖子<p><br/></p>,然后我遇到了这个问题!)

编辑:

如果我在输入中有这个,

$content = '<p><br/>hello<br/>hello<br/></p>';
Run Code Online (Sandbox Code Playgroud)

那应该是

<p>hello<br/>hello</p>'
Run Code Online (Sandbox Code Playgroud)

Emi*_*ggi 4

要选择提到的 br,您可以使用:

 "//p[node()[1][self::br]]/br[1] | //p[node()[last()][self::br]]/br[last()]"
Run Code Online (Sandbox Code Playgroud)

或者,(也许)更快:

 "//p[br]/node()[self::br and (position()=1 or position()=last())]"
Run Code Online (Sandbox Code Playgroud)

当 p 的第一个(或最后一个)节点是 br 时,只需获取 br。

这将选择 br 例如:

<p><br/>hello</p>
<p>hello<br/></p>
Run Code Online (Sandbox Code Playgroud)

第一个和最后一个 br 像这样:

<p><br/>hello<br/>hello<br/></p>
Run Code Online (Sandbox Code Playgroud)

不是像这样的中间 br:

<p>hello<br/>hello</p>
Run Code Online (Sandbox Code Playgroud)

PS:最终得到像这样的一对中的第一个 br <br/><br/>

"//br[following::node()[1][self::br]]"
Run Code Online (Sandbox Code Playgroud)