php从字符串中删除所有css display none

时间:2015-11-30 00:21:13

标签: php html css regex

我有一个包含css的html字符串,类似于:

<div style="display: none; someotherstyle: freaky; etc ...">
    Some Content
</div>

我想在PHP中处理字符串以删除display: none;的所有实例

但我也想补偿差异,例如区分大小写,组件之间的空白区域(例如display : none ;)和遗漏分号(即display:none)< / p>

谢谢你的任何建议!

2 个答案:

答案 0 :(得分:1)

使用解析器可能更安全,尽管您仍然需要正则表达式来在style属性中找到该特定值。这是一个起点。

$string = 'But I\'d also like to compensate for discrepancies such as case sensitivity, white space between the components (eg. display :     none ;) and omission of the trailing semicolon (ie. display:none)';
echo preg_replace('/display\h*:\h*none\h*;?/', '', $string);

输出:

But I'd also like to compensate for discrepancies such as case sensitivity, white space between the components (eg. ) and omission of the trailing semicolon (ie. )

\h是一个水平的空格 *是一个量词,表示前一个字符出现零次或多次。 (在这种情况下是空格)
/delimiters,他们告诉正则表达式开始和结束的位置 ?使前面的字符/组可选。

Regex101演示:https://regex101.com/r/cE1pC6/1

正如您在输出中注意到的那样,它不会删除任何包含display: none的父项(带有可选位)。因此,例如(eg. )被遗忘,但display: none ;已消失。

可以在结束分隔符后添加i modifier,因此表达式不区分大小写。

答案 1 :(得分:0)

您可以使用 sed 执行此操作。

sed "s/display\s*:\s*none\s*;\?\s*//ig" test.txt