1

All 、抽出するパターン正規表現を書きたい: "/images/colorbox/ie6/borderBottomRight.png"fromcssContent=".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\(\.\.([^)]+)\)"

これは、閉じ括弧ではないものが1 回以上:url(..続くものを探します。最後に閉じ括弧が続きます。キャプチャされたグループはatで利用できますが、一致した完全な文字列、つまり fromから最後のまでが得られます。[^)])+)()group(1)group(0):url)

于 2013-08-18T04:30:07.780 に答える
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));
}
于 2013-08-18T04:33:53.667 に答える