import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
class Main {
private static final Pattern REGEX_GROUP = Pattern.compile("<(?<group>[^>]+)>");
private static final String[] URL_REGEXES = {
"/articles/(?<articlId>[0-9]+)(?:$|/)",
"/comments/(?<commentId>[0-9]+)(?:$|/)"
};
private static final Map<Pattern,Replace> PATTERNS = new HashMap();
private static final class Replace {
String group;
String newValue;
Replace(String group, String newValue) {
this.group = group;
this.newValue = newValue;
}
}
static {
System.out.println(REGEX_GROUP);
for (String urlRegex : URL_REGEXES) {
Matcher m = REGEX_GROUP.matcher(urlRegex);
if (m.find()) {
Pattern p = Pattern.compile(urlRegex);
String group = m.group("group");
String newValue = "{" + group + "}";
PATTERNS.put(p, new Replace(group, newValue));
}
}
}
public static void main(String[] args) {
String[] data = {"/articles/123","/comments/234", "/articles/345/comments/456",
"/articles/123-guid"
};
for (String s : data) {
System.out.print(s + " -> ");
Matcher m = null;
for (Pattern p: PATTERNS.keySet()) {
m = p.matcher(s);
if (m.find()) {
Replace r = PATTERNS.get(p);
s = s.replace(m.group(r.group), r.newValue);
}
}
System.out.println(" -> " + s);
}
}
}