2

次の文字列を考慮します。

String s = "/static/201105-3805-somerandom/images/optional-folder/filename.gif";

「static/201105-3805-somerandom/」部分を削除するにはどうすればよいですか? 「201105-3805-somerandom」の部分は完全にランダムですが、常に以下で構成されます: - 6 桁 - 「-」文字 - {1, n} 桁の文字 - 「-」文字 - {1, n} 桁と文字文字

を使用する"/static/[0-9]*-[0-9]*-*/";と、「{1, n} の数字と文字の文字」の直後のものではなく、最後の / まですべてが置き換えられます。何が欠けていますか?

4

8 に答える 8

4

これを次のように変更してみてください。

/static/[0-9]*-[0-9]*-.*?/

*デフォルトでは貪欲ですが、指定*?すると消極的になります。

または、次のように正規表現なしでこれを行うこともできます。

String s = "/static/201105-3805-somerandom/images/optional-folder/filename.gif";
System.out.println(s.substring(s.indexOf('/', "/static/".length())));

/これにより、静的部分の直後のインデックスから検索が開始されます。次のように出力されます。

/images/optional-folder/filename.gif
于 2011-07-01T09:38:15.357 に答える
2

貪欲でない必要があります *:

"/static/[0-9]*-[0-9]*-.*?/"
于 2011-07-01T09:38:35.940 に答える
1
s = s.replaceAll("^/static/\\d{6}-\\d{1,}-.*?/","")
于 2011-07-01T09:39:01.190 に答える
0

@Johnの回答を拡張するためにString、「somerandom」が数字と文字に制限されているOPの要件から逸脱してはならない場合、次の正規表現が機能します。

"/static/\\d{6}-\\d+-\\p{Alnum}+/"

これは、文字が US-ASCII であることを前提としています。ただし、Unicode 文字をサポートする必要がある場合 ( Unicode General Categoryのセクション 4.5、126 ページを参照)、次の正規表現を使用できます。

"/static/\\d{6}-\\d+-(\\p{Lu}|\\p{Ll}|\\p{Nd})+/"

そして、「somerandom」が完全にランダム (/文字を除く) に変更された場合、次のように動作します。

"/static/\\d{6}-\\d+-[^/]+/"
于 2011-07-01T12:17:35.170 に答える
0

これを試して:

    String s = "/static/201105-3805-somerandom/images/optional-folder/filename.gif";
    String regex = "/static/\\d{6}-\\d{4}-.*?/";
    System.out.println(s.replaceAll(regex, "")); // "images/optional-folder/filename.gif"

あなたは「貪欲な」マッチを使用して.*いますが、貪欲でないマッチが必要でした.*?

于 2011-07-01T09:39:11.530 に答える
0

"/static/[0-9]*-[0-9]*-[0-9a-zA-A]*?/"多分試してみてください?

于 2011-07-01T09:39:18.257 に答える
0

使用する:

/static/[0-9]{6}-[0-9]*-[a-zA-Z0-9]*//

/ の前の最後の * は、後続のすべての文字 (スラッシュを含む) と単純に一致したため、より具体的にする必要があり、代わりに [a-zA-Z0-9] を使用してください。

于 2011-07-01T09:40:03.820 に答える
0

正規表現以外では、「/images...」が修正されている場合に機能します。

String given = "/static/201105-3805-somerandom/images/optional-folder/filename.gif";
String replaced = given.substring(given.indexOf("/images"), given.length());
于 2011-07-01T09:43:14.300 に答える