我必须清除所有样式属性,但不能清除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 >
答案 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 =''
的两个属性