2010-06-13 53 views
2

我是新來正則表達式。我想用java的replaceAll()函數替換字符串中的所有CSS註釋。Java - 正則表達式問題

基本上我想用正則表達式搜索任何被「/*」和「*/」包圍的東西,並用「」代替它。

回答

2

一個例子是:

body { font-family: "/* this is not a comment */"; } 

但是,如果你不關心這些情況下,您可以簡單地這樣走:

str.replaceAll("/\\*.*?\\*/", ""); 

比賽開始於找到第一個/*,然後查找下一個*/,儘可能少的字符(.*?)。

2

這是不能做到的。在大多數情況下,您可以使用正則表達式查找大多數註釋,但CSS不是常規語法,因此您無法使用正則表達式查找所有情況。

+0

嗯。你會如何建議我這樣做? – Jakir00 2010-06-13 21:36:05

+0

@Jacob - 尋找能夠完成工作的現有工具;例如做一個谷歌搜索「CSS壓縮」。或者,如果您想要嵌入代碼,請嘗試「CSS parser java」。 – 2010-06-13 23:47:06

1

您可能會考慮通過可用的許多javascript/CSS最小化工具之一運行JavaScript。在其他技巧,使其更小,它也消除了評論。其中一個簡單的正則表達式失敗

+0

我正在使用Java。不是javascript – Jakir00 2010-06-13 21:44:43

+0

我的意思是CSS,謝謝糾正我。我想我是說Java正則表達式不是最好的工具。獲得95%的解決方案非常容易,但由於具有多種語言的所有組合,轉義序列,/ * ... * /在字符串或CDATA部分中的複雜性,正則表達式很快變得無法維護。適度使用正則表達式是一個強大的工具。 – 2010-06-13 21:53:50

0

我建議爲此使用YUI compressorDownload的JAR,放在classpath中,並使用它,如下所示:

BufferedReader reader = null; 
BufferedWriter writer = null; 
try { 
    reader = new BufferedReader(new InputStreamReader(new FileInputStream("/path/to/original.css"), "UTF-8")); 
    writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/path/to/compressed.css"), "UTF-8")); 
    new CssCompressor(reader).compress(writer, -1); 
} finally { 
    if (writer != null) try { writer.close(); } catch (IOException logOrIgnore) {} 
    if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} 
} 

但是,由於它不僅能消除的意見,但它也minifies的CSS。不知道這是否符合要求,但它也有好處。我們在webapp的自動部署過程中使用它。