0

次のJavaScriptから画像名を取得しようとしています。

var g_prefetch ={'Im': {url:'\/az\/hprichbg\/rb\/WhiteTippedRose_ROW10477559674_1366x768.jpg', hash:'674'}

問題:

画像の名前は可変です。つまり、上記のサンプルコードでは、画像は定期的に変更されます。

私が欲しい出力:

WhiteTippedRose_ROW10477559674_1366x768.jpg

そして私は次の正規表現を試しました:

Pattern p = Pattern.compile("\{\'Im\'\: \{url\:\'\\\/az\\\/hprichbg\\\/rb\\\/(.*?)\.jpg\'\, hash\:\'674\'\}");
                    //System.out.println(p);
                    Matcher m=p.matcher(out);
                        if(m.find())                            {
                            System.out.println(m.group());

                            }

私はRegExpをあまり知らないので、私を助けて、アプローチを理解させてください。ありがとうございました

4

3 に答える 3

0

/画像が常にaの後に配置され、が含まれていないと仮定すると/、次のように使用できます。

String s = "{'Im': {url:'\\/az\\/hprichbg\\/rb\\/WhiteTippedRose_ROW10477559674_1366x768.jpg', hash:'674'}";
s = s.replaceAll(".*?([^/]*?\\.jpg).*", "$1");
System.out.println("s = " + s);

出力:

s = WhiteTippedRose_ROW10477559674_1366x768.jpg

実質的に:

.*?             skip the beginning of the string until the next pattern is found
([^/]*?\\.jpg)  a group like "xxx.jpg" where xxx does not contain any "/"
.*              rest of the string
$1              returns the content of the group
于 2013-03-09T14:21:36.490 に答える
0

文字列が常にこの形式である場合、私は単純に次のようにします。

int startIndex = s.indexOf("rb\\/") + 4;
int endIndex = s.indexOf('\'', startIndex);
String image = s.substring(startIndex, endIndex);
于 2013-03-09T14:22:10.843 に答える
0

次の正規表現を使用しますが、十分に高速である必要があります。

Pattern p = Pattern.compile("[^/]+\\.jpg");
Matcher m = p.matcher(str);
if (m.find()) {
  String match = m.group();
  System.out.println(match);
}

これは、 /を含まない.jpgで終わる文字の完全なシーケンスと一致します。

正しいアプローチは、ファイル名の正当性をチェックすることだと思います。

以下は、Windows で使用できない文字のリスト"\\/:*?\"<>|" です。Mac /: Linux/Unix/の場合。

これは、フォーマットが変更されると仮定したより複雑な例です。ほとんどの場合、正当なウィンドウ ファイル名用に設計されています。

String s = "{'Im': {url:'\\/az\\/hprichbg\\/rb\\/?*<>WhiteTippedRose_ROW10477559674_1366x768.jpg', hash:'674'}";

Pattern p = Pattern.compile("[^\\/:*?\"<>|]+\\.jpg");
Matcher m = p.matcher(s);
if (m.find()) {
  String match = m.group();
  System.out.println(match);
}

これはまだ印刷されます WhiteTippedRose_ROW10477559674_1366x768.jpg

ここでデモを見つけることができます

于 2013-03-09T14:56:17.290 に答える