是否可以用正则表达式替换div内容?

时间:2011-06-17 22:31:38

标签: php regex replace

是否可以编写正则表达式来替换<div id=”somevalue123” class=”text-block”></div>之间的所有内容?我可以这样做,但我遇到的问题是字符串中还有其他div节点。

这是我正在使用的当前正则表达式:

public static function replaceStringBetween($start, $end, $new, $source, $limit = 1)
{
    // Reinitialize the replacement count
    self::$replacement_count = 0;

    // Try to perform the replacement
    $result = preg_replace('#('.preg_quote($start) . ')(.*)('.preg_quote($end) 
        . ')#is', '$1' . $new . '$3', $source, $limit, $count);
    if ($count > 0)
    {
        self::$replacement_count++;
        return $result;
    }

    // As a fallback, try again with a different method
    $result = preg_replace ("#{$start}(.*){$end}#is", $new, $source, $limit, $count);
    if ($count > 0)
    {
        self::$replacement_count++;
        return $result;
    }

    // Return the original
    return $source;
}

我正在传递一个HTML文件作为源代码。 感谢

2 个答案:

答案 0 :(得分:2)

一个简单易用的PHP解析器,我以前用过的就是Simple HTML DOM Parser。您可以使用选择器div#somevalue123

答案 1 :(得分:0)

正则表达式无法支持任意嵌套。您可能需要考虑用于任意嵌套的下推自动机(解析器)。

在实践中,您可以设计一系列正则表达式来解析固定数量的这些。但是,一旦你开始处理错误条件和(解析)错误,你真的试图将正则表达式转换为解析器的位置。

这似乎你可能想要重新考虑你所寻求的模块化方法和设计,而不是在事后通过使用正则表达式诱饵和开关将其放入。