package org.caudexorigo.jpt.web.netty.routing.namedregexp; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class NamedPattern { private static final Pattern NAMED_GROUP_PATTERN = Pattern.compile("\\(\\?<(\\w+)>"); private Pattern pattern; private String namedPattern; private List<String> groupNames; public static NamedPattern compile(String regex) { return new NamedPattern(regex, 0); } public static NamedPattern compile(String regex, int flags) { return new NamedPattern(regex, flags); } private NamedPattern(String regex, int i) { namedPattern = regex; pattern = buildStandardPattern(regex); groupNames = extractGroupNames(regex); } public int flags() { return pattern.flags(); } public NamedMatcher matcher(CharSequence input) { return new NamedMatcher(this, input); } Pattern pattern() { return pattern; } public String standardPattern() { return pattern.pattern(); } public String namedPattern() { return namedPattern; } public List<String> groupNames() { return groupNames; } public String[] split(CharSequence input, int limit) { return pattern.split(input, limit); } public String[] split(CharSequence input) { return pattern.split(input); } public String toString() { return namedPattern; } static List<String> extractGroupNames(String namedPattern) { List<String> groupNames = new ArrayList<String>(); Matcher matcher = NAMED_GROUP_PATTERN.matcher(namedPattern); while(matcher.find()) { groupNames.add(matcher.group(1)); } return groupNames; } static Pattern buildStandardPattern(String namedPattern) { return Pattern.compile(NAMED_GROUP_PATTERN.matcher(namedPattern).replaceAll("(")); } }