正则表达式清除除text-align之外的所有样式

时间:2013-10-18 16:10:18

标签: php regex

我必须清除所有样式属性,但不能清除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>

更新

我找到了解决方案。不那么优雅,但有效:

$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 >

2 个答案:

答案 0 :(得分:0)

如果你只需要text-align,只需“抓住”样式属性及其引用之间的所有内容(本例中为有效的CSS),并将其替换为更正后的样式。

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

因此,您的替换将是:

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

答案 1 :(得分: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 =''

的两个属性