preg_match用class获取div内容

时间:2013-08-13 09:10:48

标签: php regex preg-match

我有类似的代码

<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>

3 个答案:

答案 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

干杯:)