簡體   English   中英

使用Regex刪除幾乎所有HTML注釋

[英]Remove almost all HTML comments using Regex

使用此正則表達式:

preg_replace( '/<!--(?!<!)[^\[>].*?-->/', '', $output )

我可以從頁面中刪除所有HTML注釋,除了以下內容:

<!--[if IE 6]>
    Special instructions for IE 6 here
<![endif]-->

我如何修改它以排除包含唯一短語(例如“ batcache”)的HTML注釋?

因此,一個HTML注釋如下:

<!--
generated 37 seconds ago
generated in 0.978 seconds
served from batcache in 0.004 seconds
expires in 263 seconds
-->

不會被刪除。


這段代碼似乎可以解決問題:

preg_replace( '/<!--([\s\S]*?)-->/', function( $c ) { return ( strpos( $c[1], '<![' ) !== false || strpos( $c[1], 'batcache' ) !== false ) ? $c[0] : ''; }, $output )

這應該替換不包含“ batcache”的注釋。 匹配在以下兩個標簽之間完成: <!---->

$result = preg_replace("/<!--((?!batcache)(?!\\[endif\\])[\\s\\S])*?-->/", "", $str);

您可以在這里進行測試。

正如其他用戶已經說過的那樣,用正則表達式解析HTML並不總是安全的,但是如果您對要解析的HTML類型有相對的保證,那么它應該可以正常工作。 如果正則表達式與某些特定用例不匹配,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM