1

所有,我想写一个模式正则表达式来提取"/images/colorbox/ie6/borderBottomRight.png"cssContent=".cboxIE6 #cboxBottomRight{background:url(../images/colorbox/ie6/borderBottomRight.png);}"

谁能为我写一个模式正则表达式?非常感谢。

我的正则表达式不能作为:

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

2 回答 2

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

用于匹配的正则表达式是(引用且没有\转义)

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

它会查找:url(..后面[^)]不是右)括号的任何内容+一次或多次;最后是右)括号。捕获的组()可在group(1)whilegroup(0)为您提供匹配的完整字符串,即 from:url到 close )

于 2013-08-18T04:30:07.780 回答
0

您犯的最大错误是使用“/”来转义您的文字字符。您需要使用“\”,而且令人讨厌的是,在 java 字符串中,“\”必须用“\”转义,所以总转义序列是“\\”。然后,您有matcher.group(0), which matches the entire pattern. You needmatcher.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));
}
于 2013-08-18T04:33:53.667 回答