0

我必须清除所有样式属性但不是文本对齐:

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

2 回答 2

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='' 这样写的两个属性

于 2013-10-18T19:46:06.813 回答
0

如果您只需要文本对齐,只需“抓取”样式属性及其引号之间的所有内容(在本例中为有效的 CSS)并将其替换为更正的样式。

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

因此,您的替换将是:

preg_replace('style=".+?"','style="text-align:left"',$html_text);
于 2013-10-18T16:21:52.823 回答