我必须清除所有样式属性,但不能清除文本对齐:
$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 >
如果您只需要文本对齐,只需"抓取"样式属性及其引号之间的所有内容(在本例中为有效 CSS),并将其替换为更正后的样式。
Match: Replace:
style=".+?" style="text-align:left"
因此,您的替换将是:
preg_replace('style=".+?"','style="text-align:left"',$html_text);
您可以使用
以下内容:
preg_replace("'(<[^>]+?)style=(?P<encl>[\'"])[^g{encl}]*(text-align:s*(?:left|right|center))[^g{encl}]*g{encl}'isu", '$1style="$3"', $html_text);
仅将标签替换为样式属性,但保留文本对齐属性。这将替换写成 style=" 和 style='' 的两个属性