Извлечение набора повторяющегося шаблона из строкового литерала в Java - PullRequest
1 голос
/ 24 сентября 2011

Каким был бы удобный и надежный способ извлечь все теги "{...}" из заданной строки?(Использование Java).

Итак, приведем пример: скажем, у меня есть: http://www.something.com/{tag1}/path/{tag2}/else/{tag3}.html

Я хочу получить все теги "{}"; я думал об использовании Java.split (), но не уверен, каким будет правильное регулярное выражение для этого.

Обратите также внимание: теги можно вызывать как угодно, а не только tagX!

1 Ответ

3 голосов
/ 24 сентября 2011

Я бы использовал регулярные выражения, чтобы соответствовать этому.Нечто подобное может работать для вашего выражения:

String regex = "\\{.*?\\}";

Так как это "неохотно" будет соответствовать любой подстроке, которая окружена {и}..*? заставляет его находить любой символ между {и}, но неохотно, поэтому он не соответствует большей строке:

{tag1}/path/{tag2}/else/{tag3}

, что было бы "жадным" совпадением.Обратите внимание, что фигурные скобки в регулярном выражении необходимо экранировать двойными обратными слешами, поскольку фигурные скобки имеют отдельное значение внутри регулярного выражения, и если вы хотите указать строку фигурных скобок, вам нужно ее избежать.

Например,

   public static void main(String[] args) {
      String test = "http://www.something.com/{tag1}/path/{tag2}/else/{tag3}.html";
      String regex = "\\{.*?\\}";

      Pattern pattern = Pattern.compile(regex);
      Matcher matcher = pattern.matcher(test);

      while (matcher.find()) {
         System.out.println(matcher.group());
      }
   }

С выводом:

{tag1}
{tag2}
{tag3}

Подробнее о регулярных выражениях можно прочитать здесь: Учебник по регулярным выражениям Oracle

и для более подробной информации, здесь: www.regular-expressions.info / tutorial

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...