php preg_replace特定html评论标签之间的所有内容

时间:2012-12-11 16:34:35

标签: php regex preg-replace

我已经检查了其他答案但似乎无法执行以下操作。请帮助别人:)

我想删除其中的所有内容,包括特定的HTML注释

HTML:

Some HTML that must stay
<!-- START IF USER_ID -->
some html that must go
<!-- END IF USER_ID -->
Some more HTML that's gotta stay
<!-- START IF USER_ID -->
this also needs to go
<!-- END IF USER_ID -->

因此,<!-- START IF USER_ID --><!-- END IF USER_ID -->之间的所有内容以及评论本身都需要

我的preg_replace模式(这显然是错误的):

"/<!-- START IF USER_ID -->.*?<!-- END IF USER_ID -->/"

结果应为

Some HTML that must stay
Some more HTML that's gotta stay

感谢您提前检查并获得答案:)

2 个答案:

答案 0 :(得分:6)

感谢@mlwacosmos - 使用您提供的链接。

达成:

$startPoint = '<!-- START IF USER_ID -->';
$endPoint = '<!-- END IF USER_ID -->';
$result = preg_replace('#('.preg_quote($startPoint).')(.*)('.preg_quote($endPoint).')#siU', '', $html);

答案 1 :(得分:3)

那个正则表达式很好看。使用m修饰符使点匹配换行符:

"/<!-- START IF USER_ID -->.*?<!-- END IF USER_ID -->/m"

或者,您可以使用[\s\S]作为替代:

"/<!-- START IF USER_ID -->[\s\S]*?<!-- END IF USER_ID -->/"