2013-08-18 21 views
1

所有,我想寫一個正則表達式模式來提取提取CSS圖像路徑:"/images/colorbox/ie6/borderBottomRight.png"cssContent=".cboxIE6 #cboxBottomRight{background:url(../images/colorbox/ie6/borderBottomRight.png);}"我想通過Java的圖形表達

誰可以寫一個正則表達式模式對我?非常感謝。

我的正則表達式不能作爲工作:

Pattern pattern = Pattern.compile("[.*]*/:url/(/././/(.+?)/)/;[.*]*"); 
Matcher matcher = pattern.matcher(cssContent); 
if(matcher.find()){ 
    System.out.println(matcher.group(0)); 
} 

回答

3
Pattern pattern = Pattern.compile(":url\\(\\.\\.([^)]+)\\)"); 
Matcher matcher = pattern.matcher(cssContent); 
if(matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 

用於匹配的正則表達式是(報價且無\轉義)

":url\(\.\.([^)]+)\)" 

看起來對:url(..隨後[^)]什麼都不是閉幕)支架+次或多次;最後依次關閉)括號。捕獲的組()可在group(1)group(0)會給你匹配,即從:url至收盤)完整的字符串。

+0

非常感謝您,它運作良好,看到您的簡短表達後,我看到很多,再次感謝您。 –

+0

+1解決方案和一個非常好的解釋。 – anubhava

+0

@JerryCai很高興幫助。請考慮接受答案。謝謝。 –

0

您最大的錯誤是使用「/」來逃避你的文字字符。你需要使用「\」,並且惱人​​的是,在一個Java字符串中,「\」必須用「\」轉義,所以總轉義序列是「\\」。然後,您有matcher.group(0), which matches the entire pattern. You need matcher.group(1)`與您的正則表達式中的第一個(也是唯一)組匹配,其中包含您感興趣的字符串。以下是更正後的代碼:

String cssContent = "cssContent=\".cboxIE6 #cboxBottomRight{background:url(../images/colorbox/ie6/borderBottomRight.png);}\""; 
String regex = ".*?:url\\(\\.\\.(.+?)\\);[.*]*"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(cssContent); 
if(matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 
+0

謝謝你,朋友們! –