Quick actions

cmd+k|ctrl+k

Navigation

Languages

PatternMatcher

Snippet info

Language

Java

Visibility

public

Author

slu

Created

2018-03-02T10:02:33Z

Updated

2018-03-06T08:23:34Z

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);
        }
        
    }
}
INFO