我正在写一个快速的preg_replace来从CSS中剥离注解。CSS注解通常有这样的语法:
/* Development Classes*/
/* Un-comment me for easy testing
(will make it simpler to see errors) */
所以我试着把/* 和 */之间的所有字符去掉,就像这样:
$pattern = "#/\*[^(\*/)]*\*/#";
$replace = "";
$v = preg_replace($pattern, $replace, $v);
不行!它似乎被正斜杠卡住了,因为如果我把/s从模式中去掉,我可以让它删除注解文本。我尝试了一些更简单的模式,看看我是否可以去掉斜杠,但它们返回的是原始字符串:
$pattern = "#/#";
$pattern = "/\//";
你知道为什么我看起来和那些斜线不一样吗?谢谢!
5条答案
按热度按时间5w9g7ksd1#
这里有一个解决方案:
取自Samstyle PHP Framework中的脚本/样式表预处理器
请参阅:http://code.google.com/p/samstyle-php-framework/source/browse/trunk/sp.php
csstest.php:
test.css:
php的输出:
vsdwdz232#
我不相信你可以在一个否定的字符类中使用分组,你要使用的是
Assertions
,它有两种类型,“look-ahead”和“look-behind”。你要找的英语模式基本上是“
forward slash, literal wildcard, anything that isn't followed by a forward slash or anything other than a literal wildcard that is followed by a forward slash or a forward slash that isn't preceded by a literal wildcard zero or more times, literal wild card, forward slash
“ekqde3dh3#
为了解决这个问题,我首先简化了代码,用不同的标识符替换“/ASTERIX”和“ASTERIX/”,然后用它们作为开始和结束标记。
s标志指示搜索到新的行
yhqotfr84#
只是为了好玩(当然也是小项目),我制作了这样一个代码的非正则表达式版本(我希望它更快):
piok6c0g5#
有很多建议,但这一条似乎对我有用:
所以
给予
工作试验见https://onlinephp.io/c/2ae1c