Java регулярное выражение: несколько совпадений в положительном взгляде - PullRequest
0 голосов
/ 23 октября 2018

У меня есть несколько таких строк:

  • my {test} value
  • my { test } value
  • my { test } value

Мне нужносоздать регулярное выражение, которое получит все внутри {} без пробелов.

Со следующим шаблоном (?<=\{)\s*[a-zA-Z]+\s*(?=}) Я получаю содержимое фигурных скобок, но с пробелами

enter image description here

Если поставить \s*к положительному взгляду вот так (?<=\{\s*)[a-zA-Z]+(?=\s*}) Я вижу следующую ошибку

Невозможно выполнить регулярное выражение.java.util.regex.PatternSyntaxException: группа наблюдения не имеет очевидной максимальной длины около индекса 8 (? <= {\ s *) [a-zA-Z] + (? = \ s *}) ^ </p>

Возможно ли достичь этого без trim() каждого совпадения с регулярным выражением?

1 Ответ

0 голосов
/ 23 октября 2018

Вам не нужно смотреть в будущее или смотреть в прошлое.Достаточно простого регулярного выражения, такого как:

\{\s*(.*?)\s*\}

Демо, https://regex101.com/r/REDmDT/2 (включая еще несколько примеров строк)

Как вы сказали: «Мне нужно создать регулярное выражение, которое будетполучить все внутри {} без пробелов "

Это регулярное выражение дает вам все в фигурных скобках, исключая пробелы справа и слева и сохраняя все пробелы внутри, как есть.

Вот код Java, демонстрирующий то же самое.

public static void main(String[] args) throws IOException {
    List<String> list = Arrays.asList("my  {test} value", "my  {   test     } value", "my  { test  } value",
            "my  { test hello I am  } value", "my  { testing 10 times  } value");
    Pattern p = Pattern.compile("\\{\\s*(.*?)\\s*\\}");

    list.forEach(x -> {
        Matcher m = p.matcher(x);
        if (m.find()) {
            System.out.println(x + " --> " + m.group(1));
        }
    });
}

Это выходы,

my  {test} value --> test
my  {   test     } value --> test
my  { test  } value --> test
my  { test hello I am  } value --> test hello I am
my  { testing 10 times  } value --> testing 10 times
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...