簡體   English   中英

用於在CSS中查找和刪除注釋的正則表達式

[英]Regular expression to find and remove comments in CSS

我正在為練習(正則表達式練習)編寫自己的縮小工具,但是經過一些教程后,我仍然沒有得到它。

例如,我試圖從我的CSS文件中查找並刪除所有注釋,其中包括:

  1. 單行注釋,如

    / **單行注釋* *** /或

    / * ** * 單行注釋* /和

  2. 多行注釋,如

    / * ***開始評論

    .myCssClass

    {

     font:13pt Arial; 

    }

** * ** * *** 評論結束* * /

到目前為止,我使用的表達式只能處理單行注釋,如下所示

(\/\*.*\*\/)

但是我想了解的正則表達式是如何告訴正則表達式引擎也能跨行。 我確實嘗試過:

(\/\*[.\n]*\*\/)

這根本不起作用。

有人知道我要去哪里錯嗎?

謝謝,雅克

如果您在C#中運行匹配項,是否嘗試過RegexOptions?

Match m = Regex.Match(word, pattern, RegexOptions.Multiline);

“多行模式。更改^和$的含義,以便它們分別在任何行的開頭和結尾匹配,而不僅僅是整個字符串的開頭和結尾。”

另請參見去除C樣式多行注釋

編輯:

OK ..看起來像一個問題與正則表達式。 這是一個使用正則表達式模式(來自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樣式注釋(以/*開頭,以*/結束且不嵌套)的正則表達式為:

[/][*]([^*]|[*]*[^*/])*[*]+[/]

(我對此事有一些書面記錄。請參見:www.nongnu.org/txr/txr-manpage.html在目錄中查找“附錄A”,並且有指向“示例:匹配的鏈接” C語言注釋”。)

C風格的注釋可以在內部包含序列/* ,這樣/*/**/是有效的注釋。 最接近的*/終止注釋,因此/* */aaa/* */是兩個注釋,中間有aaa ,而不是一個注釋。 這種“非貪婪”行為會使沒有非貪婪運算符的正則表達式語言中的匹配復雜化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM