正则表达式用于清除除文本对齐之外的所有样式


regexp for clear all style except 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 >

如果您只需要文本对齐,只需"抓取"样式属性及其引号之间的所有内容(在本例中为有效 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='' 的两个属性