Страницы

Поиск по вопросам

суббота, 8 июня 2019 г.

Составление паттернов

Нужно вырезать некий блок символов из строки блок вот такой
ParName{ //content }
Мне нужно вырезать и ParName и { и content и } Я использую
Pattern p = Pattern.compile(".*?\\{+\\}"); Matcher m = p.matcher(out); f(m.find()){ System.out.println(m.group().subSequence(0, m.group().length())); }else{ System.err.println("Ошибка"); }
Выводит Ошибка, -не нашел?


Ответ

Регулярные выражения интересная вещь. Когда кажется, что уже предусмотрел всё, что нужно, возникает еще пятнадцать идей, как усовершенствовать свою регулярку и написать более однозначно :).
Предлагаю такой вариант регулярки для решения задачи:
Pattern p = Pattern.compile("(?ms)(?:ParName\\{){1}(.*[^}].*){0,1}[}]{1}"); Matcher m = p.matcher("ParName{ my
internal
\t\ttext }"); if(m.find()) { System.out.println("result: " + m.group(1)); } else { System.out.println("not found ..."); }
Полезно посмотреть:
Исходники класса Pattern. Документация Pattern Пример использования: match-multiline-text-using-regular-expression java-regex-tester
П.С. Еще пример регулярного выражения от активного участника "(?ms)(?:ParName\\{)([^}]*)\\}"

Комментариев нет:

Отправить комментарий