我是这个字符串:
<h3>Test</h3><table></table><table></table><table></table>
我的预期结果:
<h3>Test</h3><table></table><table></table>
我试过了:
<h3>Test<\/h3>.+?(\/table>)
但它是懒惰的表达,所以结果将是:
<h3>Test</h3><table></table>
如果我没错,我需要使用HTML Dom Parser来完成这项任务,但只是好奇如何在这种情况下使用正则表达式来完成它。
答案 0 :(得分:1)
由于您很好奇如何使用正则表达式执行此操作,您可以使用贪心量词而不是正向前瞻。
preg_match('~<h3>Test</h3>.+(?=<table>)~', $text, $match);
echo $match[0]; //=> "<h3>Test</h3><table></table><table></table>"
但我不清楚这些是否是真正的空表,如果你们之间有内容:
preg_match('~<h3>Test</h3>(?:.*?</table>){2}~', $text, $match);
使用正确的工具:
$doc = DOMDocument::loadHTML('
<h3>Test</h3><table></table><table></table><table></table>
');
$xpath = new DOMXPath($doc);
$node = $xpath->query('//table[last()]')->item(0);
$nnode = $node->parentNode->removeChild($node);
echo $doc->saveHtml();
答案 1 :(得分:0)
使用延迟表达式的一个例子是:
"<h3>Test</h3>.+?</table>.+?</table>"