Условия поиска регулярного выражения java

274
15 февраля 2017, 21:48

Дана url ссылка допустим https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8# нужно убрать все цифровые символы, и чтобы вывод ссылки был после первого знака ? и разделяться параметрами = или -, вывод ссылки должен быть "sourceid chrome instant ion espv ie UTF" хочу решить через регулярные выражения, пока что смог только убрать все символы. помогите плз разобраться с условием для регулярного выражения

String url = "https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8# ";
        String regexp1 =  "([?\\.\\&\\:\\;\\/\\=\\-\\#]+)";
//используем Паттерн, компилируем регулярное выражение
        Pattern pattern1 = Pattern.compile(regexp1);
//делаем матчер по созданному паттерну и кидаем в конструктор наш URL.
        Matcher matcher1 = pattern1.matcher(url);
        String output = matcher1.replaceAll(" ");
        System.out.println(output);
Answer 1

Если не извращаться регулярками, то можно так:

public static Map<String, List<String>> splitQuery(URL url) throws UnsupportedEncodingException {
  final Map<String, List<String>> query_pairs = new LinkedHashMap<String, List<String>>();
  final String[] pairs = url.getQuery().split("&");
  for (String pair : pairs) {
    final int idx = pair.indexOf("=");
    final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;
    if (!query_pairs.containsKey(key)) {
      query_pairs.put(key, new LinkedList<String>());
    }
    final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : null;
    query_pairs.get(key).add(value);
  }
  return query_pairs;
}

Метод вернёт мапу с параметрами и значениями оных. Из неё уже можно отбросить все значения-числа.

По ссылке есть и другие решения разной степени простоты.

Answer 2

Можно сделать так:

String url = "https://www.google.ru/webhp?sourc23eid=chrome-instant&ion=1&espv=2&ie=UTF-8#";
Pattern pattern = Pattern.compile("[\\w]+=([\\w-]+)&?");
Matcher matcher = pattern.matcher(url);
while (matcher.find())
        System.out.println(matcher.group(1));

Вывод будет следующий:

chrome-instant
1
2
UTF-8

READ ALSO
Верстка блока меню и поиска

Верстка блока меню и поиска

Помогите сверстать блок менюне могу разобраться как сделать все в один ряд

288
Срабатывание animation + wow внутри div

Срабатывание animation + wow внутри div

Добрый вечерУ меня проблема с анимацией wow

344
Адаптивный дизайн - расположение блоков

Адаптивный дизайн - расположение блоков

Есть шаблон адаптивного дизайна сайта https://jsfiddlenet/u0t72dgh/

236
Как реализовать такое резиновое окно? [требует правки]

Как реализовать такое резиновое окно? [требует правки]

Как реализовать такое окно и чтобы резина была?

311