2012-12-11 61 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