是否可以编写正则表达式来替换<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文件作为源代码。 感谢
答案 0 :(得分:2)
一个简单易用的PHP解析器,我以前用过的就是Simple HTML DOM Parser。您可以使用选择器div#somevalue123
。
答案 1 :(得分:0)
正则表达式无法支持任意嵌套。您可能需要考虑用于任意嵌套的下推自动机(解析器)。
在实践中,您可以设计一系列正则表达式来解析固定数量的这些。但是,一旦你开始处理错误条件和(解析)错误,你真的试图将正则表达式转换为解析器的位置。
这似乎你可能想要重新考虑你所寻求的模块化方法和设计,而不是在事后通过使用正则表达式诱饵和开关将其放入。