我正在编写自己的用于练习的缩小工具(正则表达式练习),但在学习了一些教程之后我仍然没有掌握它。
例如,我试图从我的 CSS 文件中查找并删除所有评论,其中包括:
单行注释
/** 单行注释****/或
/****单行注释*/and
多行注释如
/****评论开始
.myCssClass
{
font:13pt Arial;
********* 评论结束**/
到目前为止,我使用的表达式只能处理单行注释,如下所示
(\/\*.*\*\/)
但是关于正则表达式,我想了解的是如何让正则表达式引擎也跨行。我试过这个:
(\/\*[.\n]*\*\/)
这根本不起作用。
有人知道我错在哪里吗?
谢谢, 雅克
最佳答案
如果您在 C# 中运行匹配,您是否尝试过 RegexOptions?
Match m = Regex.Match(word, pattern, RegexOptions.Multiline);
“多行模式。改变 ^ 和 $ 的含义,使它们分别匹配任何行的开头和结尾,而不仅仅是整个字符串的开头和结尾。”
另见 Strip out C Style Multi-line Comments
编辑:
好的..看起来像是正则表达式的问题。这是一个使用来自 http://ostermiller.org/findcomment.html 的正则表达式模式的工作示例.这个人在推导正则表达式方面做得很好,并展示了各种方法的缺陷和不足。注意:RegexOptions.Multiline/RegexOptions.Singleline 似乎不会影响结果。
string input = @"this is some stuff right here
/* blah blah blah
blah blah blah
blah blah blah */ and this is more stuff /* blah */
right here.";
string pattern = @"(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)";
string output = Regex.Replace(input, pattern, string.Empty, RegexOptions.Singleline);
关于c# - 在 CSS 中查找和删除注释的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10554444/