2012-12-11 60 views
3

我已经检查了其他答案,但似乎无法做到以下几点。请帮助别人:)PHP preg_replace在特定的html评论标签之间的一切

我想在两者之间,并包括具体的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 -->之间和自身需要去评论(这显然是错的):

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

结果应该是

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

感谢您检查和提前的答案:)

+1

也许它可以帮助http://www.adminhelpline.com/en/ free-scripts/php/string/how-to-replace-text-between-2-tags-with-php – mlwacosmos

+0

@mlwacosmos谢谢你。本来可以接受你的答案。 +1 – Onimusha

回答

6

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

实现了与:

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

如何做到这一点,但停在第一个$端点?如果您有xxx $ start yyy $ end zzz $ end。我不想删除zzz,因为之前有一个enpoint。 – neoteknic

+0

谢谢@neoteknic从未意识到这一点。修改了包含非贪婪修饰符'U'的答案,该修饰符在第一个点停止,然后继续向前。 – Onimusha

3

该正则表达式看起来很好。使用一个m修改,使点匹配换行符:

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

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

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

谢谢。 '/ m'不起作用,但'[\ s \ S]'像一个魅力一样工作:) – Onimusha