package org.schabi.newpipe.extractor.utils; import org.schabi.newpipe.extractor.exceptions.ParsingException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * Created by Christian Schabesberger on 02.02.16. * * Copyright (C) Christian Schabesberger 2016 * Parser.java is part of NewPipe. * * NewPipe is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * NewPipe is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NewPipe. If not, see . */ /** * avoid using regex !!! */ public class Parser { private Parser() { } public static class RegexException extends ParsingException { public RegexException(String message) { super(message); } } public static String matchGroup1(String pattern, String input) throws RegexException { return matchGroup(pattern, input, 1); } public static String matchGroup(String pattern, String input, int group) throws RegexException { Pattern pat = Pattern.compile(pattern); Matcher mat = pat.matcher(input); boolean foundMatch = mat.find(); if (foundMatch) { return mat.group(group); } else { if (input.length() > 1024) { throw new RegexException("failed to find pattern \"" + pattern); } else { throw new RegexException("failed to find pattern \"" + pattern + " inside of " + input + "\""); } } } public static boolean isMatch(String pattern, String input) { Pattern pat = Pattern.compile(pattern); Matcher mat = pat.matcher(input); return mat.find(); } public static Map compatParseMap(final String input) throws UnsupportedEncodingException { Map map = new HashMap<>(); for (String arg : input.split("&")) { String[] splitArg = arg.split("="); if (splitArg.length > 1) { map.put(splitArg[0], URLDecoder.decode(splitArg[1], "UTF-8")); } else { map.put(splitArg[0], ""); } } return map; } }