Skip to main content
 首页 » 编程设计

c#之在 CSS 中查找和删除注释的正则表达式

2024年02月02日31Terrylee

我正在编写自己的用于练习的缩小工具(正则表达式练习),但在学习了一些教程之后我仍然没有掌握它。

例如,我试图从我的 CSS 文件中查找并删除所有评论,其中包括:

  1. 单行注释

    /** 单行注释****/或

    /****单行注释*/and

  2. 多行注释如

    /****评论开始

    .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);