获取并删除<;p>;包含带有PHP DomDocument的特定id的元素

获取并删除<;p>;包含带有PHP DomDocument的特定id的元素,php,html,regex,Php,Html,Regex,我有一个用例,其中有大量的文本(一个文章正文),我需要识别并删除包含特定文本的两个段落元素。这是我们希望在网页上显示的内容,而不是在用于向其他工具提供内容的RSS提要中。元素如下所示: <p style="text-align: center;"><strong><em><<< Please consider helping us financially with your tax-deductible contribution today

我有一个用例,其中有大量的文本(一个文章正文),我需要识别并删除包含特定文本的两个段落元素。这是我们希望在网页上显示的内容,而不是在用于向其他工具提供内容的RSS提要中。元素如下所示:

<p style="text-align: center;"><strong><em><<< Please consider helping us financially with your tax-deductible contribution today >>></em></strong></p>

我现在很难弄清楚接下来该怎么办。此时,$buttonElement是一个DomeElement,但我需要从$xmlDoc中删除它,然后调用
$xmlDoc->saveHTML()
,以获得HTML输出。我如何从拥有domeElement到将其从$xmlDoc中删除?

我认为您会从表达式中获得更多的自由。试试这个:

/(?:<(?:p|strong|em)\s*(?:[a-z]+=".+")?>){1,3}<<<\s*[a-z\s-]+\s*>>>(?:<\/(?:p|strong|em)\s*>){1,3}/gi
/(?:){1,3}(?:){1,3}/gi
请注意,
(?:)
表示非捕获组。如果要存储标记类型或其他内容,请删除
?:
,然后将存储匹配的部分。你也可以考虑把整个东西包装在一个匹配的组中,这样它就可以被进一步操纵了。 使用或:

phpQuery示例:

$html=phpQuery::newDocumentHTML(
“新的测试!!!”P风格=“文本对齐:中心”>强>请考虑今天在你的减税贡献中帮助我们财政< <强> 

< P>某段

); $HTML ->查找(“p:包含”(“请考虑帮助我们在经济上与您今天的税收减免贡献”)“-”-ReXVEVER(); 返回$html->html();
$html=phpQuery::newDocumentHTML(
“条目段落

这是一个测试div” ); $html->find('pa[href*='https://www.example.com/join-the-movement?“)->parent()->remove(); 返回$html->html();
<代码>字符类是字符,而不是单词,所以<代码> <代码>都是单独的字符,而不是元素。<代码> > p> <代码>将不会,也不会> <代码> <强> <代码>。您是否考虑过正则表达式可能不是,但是?用HTML之类的非正则语言投掷更多正则表达式不是最好的解决方案。要求一个正则表达式,所以我给了他们一个。我认为这不值得投反对票。
<<<\s[a-zA-z\s-]+\s>>>
<p id="donateButtonHeading" style="text-align: center;"><strong><em><<< Please consider helping us financially with your tax-deductible contribution today >>></em></strong></p>
$xmlDoc = new DOMDocument();
$xmlDoc->validateOnParse = true;
$xmlDoc->loadHTML($body);
  foreach (array('donateButtonHeading', 'donateButtonMarkup') as $buttonElementId) {
    $buttonElement = $xmlDoc->getElementById($buttonElementId);

  }
/(?:<(?:p|strong|em)\s*(?:[a-z]+=".+")?>){1,3}<<<\s*[a-z\s-]+\s*>>>(?:<\/(?:p|strong|em)\s*>){1,3}/gi