2013-10-18 66 views
0

我必須清除所有的樣式屬性,但不是的text-align:正則表達式爲清除所有樣式除了文本對齊

$html_text='<td style=" width:297pt  ; text-align:left; border-top:solid windowtext 0.5pt;border-right:solid windowtext 0.5pt;border-bottom:solid windowtext 0.5pt;border-left:solid windowtext 0.5pt;border-top:solid windowtext 0.5pt;border-right:solid windowtext 0.5pt;border-bottom:solid windowtext 0.5pt;border-left:solid windowtext 0.5pt;"><p style="direction:ltr;unicode-bidi:normal;text-autospace:none;">'; 
$html_text = 
preg_replace('/style=\"[^\"]*(text-align:[^;]+)+[^\"]*\"/', "style=\"$1\"",$html_text); 



echo $html_text; 

結果:

<td style="text-align:left"><p style="direction:ltr;unicode-bidi:normal;text-autospace:none;"> 

任何一個正則表達式需要

我想成爲

<td style="text-align:left"><p> 

UPDATE

我找到了soluton。不那麼優雅,但工程:

$html_text='<td style=" width:297pt  ; text-align:left; border-top:solid windowtext 0.5pt;border-right:solid windowtext 0.5pt;border-bottom:solid windowtext 0.5pt;border-left:solid windowtext 0.5pt;border-top:solid windowtext 0.5pt;border-right:solid windowtext 0.5pt;border-bottom:solid windowtext 0.5pt;border-left:solid windowtext 0.5pt;"><p style="direction:ltr;unicode-bidi:normal;text-autospace:none;">'; 
$html_text = 
preg_replace('/style=\"[^\"]*(text-align:[^;]+)[^\"]*\"/', "styyy=\"$1\"",$html_text); 
$html_text =preg_replace('/style=\"[^\"]*\"/', "",$html_text); 
$html_text =str_replace('styyy', "style",$html_text); 

echo $html_text; 

結果不出所料:

<td style="text-align:left"><p > 

回答

0

如果你只需要文本對齊,簡單的「搶」 style屬性,一切的報價之間(有效的CSS在這種情況下, )並將其替換爲更正後的樣式。

Match:   Replace: 
style=".+?" style="text-align:left" 

因此,您的更換將是:

preg_replace('style=".+?"','style="text-align:left"',$html_text); 
+0

這兩個屬性如果在原始樣式中沒有'text-align:left'會怎麼樣?從我在這種情況下看到的OP也想刪除'style'屬性。 – Pshemo

+0

是的。所有的作品都很好,如果風格包含文本對齊,但如果不是 - 沒有運氣。 – clarent

0

您可以使用以下方法:

preg_replace("'(<[^>]+?)style=(?P<encl>[\\'\"])[^\g{encl}]*(text-align:\s*(?:left|right|center))[^\g{encl}]*\g{encl}'isu", '$1style="$3"', $html_text); 

與樣式屬性取代標籤,但留下的text-align屬性。這將取代寫成像style =「」和style =「'

+0

你剛剛變得複雜了!那應該不會太久! – revo

+0

它只是更嚴格,因此它只匹配標籤和引號,可以簡化。 –