import java.util.*;
import java.util.regex.*;
class Test
{
{
Pattern pattern_azurite = Pattern.compile("abfss?://([^@/]*)@(\\d{1,3}(?:\\.\\d{1,3}){3}:\\d+)/([^/]+)(?:/(.+))?");
Pattern pattern_original = Pattern.compile("abfss?://([^/]+)@([^.]+)(\\.[^/]+)(?:/(.+))?");
"abfs://storage@myaccount.dfs.core.windows.net/selim/test.csv",
"abfs://storage@127.0.0.1:10000/devstoreaccount1/selim/test.csv",
"http://w...content-available-to-author-only...h.blah"
};
Map
<String, String
> result
= null; Matcher matcher_azurite = pattern_azurite.matcher(s);
if (matcher_azurite.find()){
result = parseMatchResult(matcher_azurite, new int[] {1, 3, -1, 4});
} else {
Matcher matcher_original = pattern_original.matcher(s);
if (matcher_original.find()){
result = parseMatchResult(matcher_original, new int[] {1, 2, 3, 4});
}
}
if (result != null) { // Now print
for (String key
: result.
keySet()) { System.
out.
println("'" + key
+ "': '" + result.
get(key
) + "'"); }
System.
out.
println("----------------"); } else {
System.
out.
println("No match!"); }
}
}
public static Map
<String, String
> parseMatchResult
(Matcher m,
int[] indices
) { res.put("fileSystem", m.group(indices[0]));
res.put("accountName", m.group(indices[1]));
res.put("accountSuffix", indices[2] > -1 ? m.group(indices[2]) : "");
res.put("relativePath", m.group(indices[3]));
return res;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4Lio7CgpjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVBhdHRlcm4gcGF0dGVybl9henVyaXRlID0gUGF0dGVybi5jb21waWxlKCJhYmZzcz86Ly8oW15AL10qKUAoXFxkezEsM30oPzpcXC5cXGR7MSwzfSl7M306XFxkKykvKFteL10rKSg/Oi8oLispKT8iKTsKCQlQYXR0ZXJuIHBhdHRlcm5fb3JpZ2luYWwgPSBQYXR0ZXJuLmNvbXBpbGUoImFiZnNzPzovLyhbXi9dKylAKFteLl0rKShcXC5bXi9dKykoPzovKC4rKSk/Iik7CgkJU3RyaW5nW10gaW5wdXRzID0gewoJCSAgICAiYWJmczovL3N0b3JhZ2VAbXlhY2NvdW50LmRmcy5jb3JlLndpbmRvd3MubmV0L3NlbGltL3Rlc3QuY3N2IiwKCQkgICAgImFiZnM6Ly9zdG9yYWdlQDEyNy4wLjAuMToxMDAwMC9kZXZzdG9yZWFjY291bnQxL3NlbGltL3Rlc3QuY3N2IiwKCQkgICAgImh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5oLmJsYWgiCgkJfTsKCQlmb3IgKFN0cmluZyBzOiBpbnB1dHMpIHsKCQkJTWFwPFN0cmluZywgU3RyaW5nPiByZXN1bHQgPSBudWxsOwoJCQlNYXRjaGVyIG1hdGNoZXJfYXp1cml0ZSA9IHBhdHRlcm5fYXp1cml0ZS5tYXRjaGVyKHMpOwoJCQlpZiAobWF0Y2hlcl9henVyaXRlLmZpbmQoKSl7CgkJCQlyZXN1bHQgPSBwYXJzZU1hdGNoUmVzdWx0KG1hdGNoZXJfYXp1cml0ZSwgbmV3IGludFtdIHsxLCAzLCAtMSwgNH0pOwoJCQl9IGVsc2UgewoJCQkJTWF0Y2hlciBtYXRjaGVyX29yaWdpbmFsID0gcGF0dGVybl9vcmlnaW5hbC5tYXRjaGVyKHMpOwoJCQkJaWYgKG1hdGNoZXJfb3JpZ2luYWwuZmluZCgpKXsKCQkJCQlyZXN1bHQgPSBwYXJzZU1hdGNoUmVzdWx0KG1hdGNoZXJfb3JpZ2luYWwsIG5ldyBpbnRbXSB7MSwgMiwgMywgNH0pOwoJCQkJfQoJCQl9CgkJCWlmIChyZXN1bHQgIT0gbnVsbCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBwcmludAoJCQkJZm9yIChTdHJpbmcga2V5IDogcmVzdWx0LmtleVNldCgpKSB7CgkJCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCInIiArIGtleSArICInOiAnIiArIHJlc3VsdC5nZXQoa2V5KSArICInIik7CgkJCSAgICB9CgkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0iKTsKCQkJfSBlbHNlIHsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTm8gbWF0Y2ghIik7CgkJCX0KCQkJCgkJfQoJfQoJcHVibGljIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcnNlTWF0Y2hSZXN1bHQoTWF0Y2hlciBtLCBpbnRbXSBpbmRpY2VzKSB7CgkJTWFwPFN0cmluZywgU3RyaW5nPiByZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKCSAgICByZXMucHV0KCJmaWxlU3lzdGVtIiwgbS5ncm91cChpbmRpY2VzWzBdKSk7CgkgICAgcmVzLnB1dCgiYWNjb3VudE5hbWUiLCBtLmdyb3VwKGluZGljZXNbMV0pKTsKCSAgICByZXMucHV0KCJhY2NvdW50U3VmZml4IiwgaW5kaWNlc1syXSA+IC0xID8gbS5ncm91cChpbmRpY2VzWzJdKSA6ICIiKTsKCSAgICByZXMucHV0KCJyZWxhdGl2ZVBhdGgiLCBtLmdyb3VwKGluZGljZXNbM10pKTsKCSAgICByZXR1cm4gcmVzOwoJfQp9