正则表达式:从 CSS 文件中删除行

4

我正在尝试从CSS文件中删除include语句。因此,给定一个类似的CSS文件:

@import url("css1.css");
@import url("css2.css");
@import url("css3.css");
.myfirstclass {color:red}

执行完命令后,我希望成为

.myfirstclass {color:red}

这是我正在使用的命令,但它没有起作用。有没有一种方法可以做到这一点?
$css_file = preg_replace("/^@import url(.*)$/", "", $css_file);    

每个CSS文件中的导入语句都以某种形式的换行符终止吗?这意味着它不是一个.min压缩后的.css文件吗? - IncredibleHat
括号需要转义,否则它们将成为一个捕获组。 - Alex K.
此外,在@之前可能会有空格,不要忘记分号...我不是正则表达式模式的专家,所以如果我知道一个正则表达式专家会很快解决这个谜题! :) - IncredibleHat
1
你忘记了 m 修饰符 $css_file = preg_replace("/^\s*@import url.*/m", "", $css_file); - revo
@AlexK 未转义的括号不会使模式失败,只会使模式变得不太字面。它实际上只会创建一个捕获组,其中包含从(;的子字符串。有问题的组件是$。要么添加m标志,要么删除$。或者最好使用revo的第二种方法。 - mickmackusa
1个回答

2

Caret符号^和美元符号$表示断言输入字符串的开头和结尾,除非设置了m标志。您还需要检查行开头的空格并匹配行末的换行符:

$css_file = preg_replace("/^\s*@import url.*\R*/m", "", $css_file);  
                             ^               ^  ^

当涉及到使用压缩过的CSS时:

$css_file = preg_replace("/@import[^;]+;/", "", $css_file);  

1
谢谢。这个很好用。但是请解释一下R是什么意思。我在搜索中找不到它的提及。从你的文本来看,它似乎可能是指换行符,但我找到的示例说要使用\r\n。 - user3052443
\R 表示任何类型的换行符,包括 Unicode 换行符。 - revo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接