2012-08-28 239 views
1

我想從html style =「」屬性中刪除一些元素。試圖從樣式中刪除某些CSS元素

<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div> 

我希望削減該HTML所以它會刪除 位置元素和背景元素。

例子:

<div style="color: red; top:0; left: 0;">Hey</div> 

我如何能做到這一點的正則表達式?

+0

出於好奇:爲什麼RegEx爲此?你不能編輯源文件,或者用CSS覆蓋樣式嗎? – bfavaretto

+0

另請參見:請使用您打算從(js?php?)運行正則表達式的語言重新提問您的問題。 – bfavaretto

回答

4

一個簡單的正則表達式可以是:

/background:.*?;|position:.*?;/ 

如果您想只style屬性裏面檢查的標籤,請嘗試以下PHP測試代碼:

<?php 
$str = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>'; 
echo preg_replace('/(<.*?style=.*?)background:.*?;|position:.*?;(.*?")/','$1$2',$str); 
?> 

您還要求匹配大小寫屬性沒有分號(唯一屬性,最後一個屬性)的情況。爲了匹配沒有分號的情況,我們應該假設這是唯一的屬性或者是最後一個。在這兩種情況下,我們將有以下的正則表達式的工作:

position:[^;]*?("|') 
background:[^;]*?("|') 

基本上,我問到跟任何字符關鍵字position:background:分號匹配除了,重複零分或多次,直到報價(單或雙)。

這涵蓋了我們稱爲「無分號」的情況。

下面的代碼應該適用於所有情況,它沒有進行優化,僅用於清晰和示例。它由調用鏈的:

$str = preg_replace('/(<.*?style.*?)(position:[^;]*?)("|\')/','$1$3',$str); 
$str = preg_replace('/(<.*?style.*?)(background:[^;]*?)("|\')/','$1$3',$str); 
$str = preg_replace('/(<.*?style.*?)(position:.*?;)(.*?")/','$1$3',$str); 
$str = preg_replace('/(<.*?style.*?)(background:.*?;)(.*?")/','$1$3',$str); 
echo $str; 
+0

它會刪除所有的背景:;和位置:;即使在div裏面...我只想在Style屬性中檢查。即使theres沒有分號(最後一個元素或單個元素並不總是) – DanR

+1

我更新了我的答案..是你在問什麼?好..分號..呃。我在做這個工作。 –

+0

如果您將後臺元素放置在position元素之後,它現在不會刪除position元素。例如:$ str ='

absdf
'; 和分號仍然是一個問題。 :\ – DanR

1

嘗試類似(雖然未經測試,所以不太清楚羯羊表達是正確的,但它應該給你足夠的路標解決問題的其餘部分)

<?php 

$pattern = array(); 
$replacement = array(); 

$pattern[0] = '/position: [a-zA-Z]+;/'; 
$pattern[1] = '/background: #[a-zA-Z0-9]+;/'; 

$replacement[0] = ''; 
$replacement[1] = ''; 

$input_html = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>'; 

echo preg_replace($pattern, $replacement, $input_html); 

?> 
0

這樣的事情應該工作:

$tag = '<div style="color: red; background: #000; position: fixed; top:0; left: 0;">Hey</div>'; 

$tag = preg_replace('/background:\s?#[0-9a-zA-Z]{3,6};\s?/', '', $tag); 

,只會是background屬性,那麼您需要的顏色屬性做一套。

$tag = preg_replace('/position:\s?[a-zA-Z];\s?/', '', $tag);