![](/img/trans.png)
[英]Regular expression to remove JavaScript double slash (//) style comments
[英]Regular expression to find and remove comments in CSS
我正在為練習(正則表達式練習)編寫自己的縮小工具,但是經過一些教程后,我仍然沒有得到它。
例如,我試圖從我的CSS文件中查找並刪除所有注釋,其中包括:
單行注釋,如
/ **單行注釋* *** /或
/ * ** * 單行注釋* /和
多行注釋,如
/ * ***開始評論
.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.