我是新來正則表達式。我想用java的replaceAll()函數替換字符串中的所有CSS註釋。Java - 正則表達式問題
基本上我想用正則表達式搜索任何被「/*
」和「*/
」包圍的東西,並用「」代替它。
我是新來正則表達式。我想用java的replaceAll()函數替換字符串中的所有CSS註釋。Java - 正則表達式問題
基本上我想用正則表達式搜索任何被「/*
」和「*/
」包圍的東西,並用「」代替它。
一個例子是:
body { font-family: "/* this is not a comment */"; }
但是,如果你不關心這些情況下,您可以簡單地這樣走:
str.replaceAll("/\\*.*?\\*/", "");
比賽開始於找到第一個/*
,然後查找下一個*/
,儘可能少的字符(.*?
)。
這是不能做到的。在大多數情況下,您可以使用正則表達式查找大多數註釋,但CSS不是常規語法,因此您無法使用正則表達式查找所有情況。
您可能會考慮通過可用的許多javascript/CSS最小化工具之一運行JavaScript。在其他技巧,使其更小,它也消除了評論。其中一個簡單的正則表達式失敗
我正在使用Java。不是javascript – Jakir00 2010-06-13 21:44:43
我的意思是CSS,謝謝糾正我。我想我是說Java正則表達式不是最好的工具。獲得95%的解決方案非常容易,但由於具有多種語言的所有組合,轉義序列,/ * ... * /在字符串或CDATA部分中的複雜性,正則表達式很快變得無法維護。適度使用正則表達式是一個強大的工具。 – 2010-06-13 21:53:50
我建議爲此使用YUI compressor。 Download的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的自動部署過程中使用它。
嗯。你會如何建議我這樣做? – Jakir00 2010-06-13 21:36:05
@Jacob - 尋找能夠完成工作的現有工具;例如做一個谷歌搜索「CSS壓縮」。或者,如果您想要嵌入代碼,請嘗試「CSS parser java」。 – 2010-06-13 23:47:06