我有类似的代码
<div class="x-ic test"><div class="abc">Test</div><table>.......</table><p>....</p><div style="margin:5px;"></div></div>
我尝试了一些模式,但我没有得到我想要的结果。
我需要在
下面得到结果<div class="abc">Test</div><table>.......</table><p>....</p><div style="margin:5px;"></div>
答案 0 :(得分:3)
使用DOMDocument
- 如果您想再次执行类似操作,我已将代码编写到函数中:
function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
function getElContentsByTagClass($html,$tag,$class)
{
$doc = new DOMDocument();
$doc->loadHTML($html);//Turn the $html string into a DOM document
$els = $doc->getElementsByTagName($tag); //Find the elements matching our tag name ("div" in this example)
foreach($els as $el)
{
//for each element, get the class, and if it matches return it's contents
$classAttr = $el->getAttribute("class");
if(preg_match('#\b'.$class.'\b#',$classAttr) > 0) return DOMinnerHTML($el);
}
}
//Calling it:
$html = '<div class="x-ic test"><div class="abc">Test</div><table>.......</table><p>....</p><div style="margin:5px;"></div></div>';
$ret = getElContentsByTagClass($html,'div','x-ic test');//<div class="abc">Test</div><table>.......</table><p>....</p><div style="margin:5px;"></div>
PHP Fiddle - 跑步(F9)
答案 1 :(得分:0)
使用正则表达式实现此目的:
<?php
$html = '<div class="x-ic test"><div class="abc">Test</div><table>.......</table><p>....</p><div style="margin:5px;"></div></div>';
$split = preg_replace('#^<div class="x-ic test">|</div>$#', '' , $html);
var_dump($split);
?>
答案 2 :(得分:0)
操作html的简单方法是使用DOM。我个人使用PHP Simple HTML DOM Parser来做到这一点。
但是因为我正在练习REGEX,这是使用正则表达式的答案:):
$text = '<div class="x-ic test"><div class="abc">Test</div><table>.......</table><p>....</p><div style="margin:5px;"></div></div>';
$text = preg_replace('/^(.*)(<div class="abc">.*)(<\/div>)$/', '$2', $text);
// OUTPUT:
<div class="abc">Test</div><table>.......</table><p>....</p><div style="margin:5px;"></div>
您可以尝试HERE
干杯:)