Как удалить <br/>, если текст не появился до или после него? DOMxpath или регулярное выражение?

Как удалить <br/> если текст не появился до или после него?

Например,

 <p><br/>hello</p> <p>hello<br/></p> 

они должны быть переписаны так,

 <p>hello</p> <p>hello</p> 

Должен ли я использовать DOMxpath или regex, было бы лучше?

(Примечание. У меня есть сообщение об удалении <p><br/></p> с DOMxpath раньше, а затем я столкнулся с этой проблемой!)

РЕДАКТИРОВАТЬ:

Если у меня есть это на входе,

 $content = '<p><br/>hello<br/>hello<br/></p>'; 

то это должно быть

 <p>hello<br/>hello</p>' 

Чтобы выбрать упомянутый бл, вы можете использовать:

  "//p[node()[1][self::br]]/br[1] | //p[node()[last()][self::br]]/br[last()]" 

или, возможно, быстрее:

  "//p[br]/node()[self::br and (position()=1 or position()=last())]" 

Просто получить br, когда первый (или последний) узел p является br.

Это выберет br, например:

 <p><br/>hello</p> <p>hello<br/></p> 

и первый и последний br, как в:

 <p><br/>hello<br/>hello<br/></p> 

не средний бр как в:

 <p>hello<br/>hello</p> 

PS: получить в итоге первый бр в такой паре <br/><br/> :

 "//br[following::node()[1][self::br]]" 

В случае какого-то кода я мог бы заставить его работать так ( Demo ). Он имеет небольшую модификацию из xpath @ empo (очень немного) и показывает удаление совпадений, а также несколько тестовых случаев:

 $html = <<<EOD <p><br/>hello</p> <p>hello<br/></p> <p>hello<br/>Chello</p> <p>hello <i>molly</i><br/></p> <p>okidoki</p> EOD; $doc = new DomDocument; $doc->loadHTML($html); $xpath = new DomXPath($doc); $nodes = $xpath->query('//p[node()[1][self::br] or node()[last()][self::br]]/br'); foreach($nodes as $node) { $node->parentNode->removeChild($node); } var_dump($doc->saveHTML());