Страницы

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

вторник, 31 марта 2020 г.

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

#java


Нужно вырезать некий блок символов из строки
блок вот такой

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("Ошибка");
}


Выводит Ошибка, -не нашел?
    


Ответы

Ответ 1



Регулярные выражения интересная вещь. Когда кажется, что уже предусмотрел всё, что нужно, возникает еще пятнадцать идей, как усовершенствовать свою регулярку и написать более однозначно :). Предлагаю такой вариант регулярки для решения задачи: Pattern p = Pattern.compile("(?ms)(?:ParName\\{){1}(.*[^}].*){0,1}[}]{1}"); Matcher m = p.matcher("ParName{ my \ninternal\n \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\\{)([^}]*)\\}"

Ответ 2



Спустя некоторое время,я наткнулся на более простое решение этой проблемы. оно заключается в использовании split String Objects[] = out.split("}\n"); int b = 0; while(Objects.length > b){ System.out.println("Obj-"+b+": "+Objects[b] + "}"); b++; } Вывод будет следующий: Obj-0: Object1{ ##########content########### } Obj-1: Object2{ ##########content########### } Может подойти,как вариант для аналогичных целей.

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

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