2012-04-15 54 views
1

原始代碼:如何使用正則表達式從HTML中剝離屬性(style屬性除外)?

<div style="height:100px;" id="main" > 
<a href="133"></a> 
<blockquote color="123"> 

後更換

<div style="height:100px;" > 
<a></a> 
<blockquote> 

我嘗試正則表達式,但它不是工作

preg_replace('#<(div|span|a|img|ul|li|blockquote).*(style=".*")?(.*)>#Us', '<$1$2>', $content); 

誰能幫我解決這個問題呢?謝謝!!

+0

的''從'風格滿足=「'到'最後出場的」'在標籤內。 – hjpotter92 2012-04-15 15:58:23

+0

是的。它是我面對的。即時通訊已經使用我們控制避免。它應該是什麼? – user1334715 2012-04-15 15:59:59

+0

我不確定,但是php-regex有'。+'匹配嗎? – hjpotter92 2012-04-15 16:01:53

回答

1

不建議正則表達式,但是這可能工作。

編輯:固定選項組,是在錯誤的地方。

測試案例在這裏:( 「* 」的風格=)http://ideone.com/vRk1u

'~ 
(< (?:div|span|a|img|ul|li|blockquote) (?=\s))   # 1 
    (?= 
    (?: 
     (?:[^>"\']|"[^"]*"|\'[^\']*\')*? 
     (              # 2 
      \s style \s*= 
      (?: (?> \s* ([\'"]) \s* (?:(?!\g{-1}) .)* \s* \g{-1}) #3 
      | (?> (?!\s*[\'"]) \s* [^\s>]* (?=\s|>)) 
     ) 
     ) 
    )? 
    ) 
    \s* (?:".*?"|\'.*?\'|[^>]*?)+ 
(/?>)             # 4 
~xs' 
0

我目前還沒有PHP可用,所以我會在Javascript上給你寫一個正則表達式,並且你可以輕鬆移植它。 (我會用RegExp對象,因此正則表達式就已經被引用爲你)

'<div style="height:100px;" id="main" >'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div style="height:100px;"> 

'<div style=\'height:100px;\' id="main" >'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div style='height:100px;'> 

'<div style="height:100px;">'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div style="height:100px;"> 

'<div dfg dfg fdg>'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div> 

'<div>'.replace(new RegExp('<([a-zA-Z0-9]*)(.*([ \t\r\n]style[ \t\r\n]*=[ \t\r\n]*(("[^"]*")|(\'[^\']*\'))))*[^>]*>'), '<$1$3>') 
== <div> 

所以它的一個正則表達式其中考慮到最可能出現的情況。

這是回答您的問題嗎?

(順便說一句,你可以,如果PHP的正則表達式支持它,它在多模式下工作代替那些[\ t \ r \ n]與空白簡寫)

相關問題