Нужно вырезать некий блок символов из строки
блок вот такой
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 \ninternal\n \t\ttext }");
if(m.find()) {
System.out.println("result: " + m.group(1));
} else {
System.out.println("not found ...");
}
Полезно посмотреть:
П.С.
Еще пример регулярного выражения от активного участника "(?ms)(?:ParName\\{)([^}]*)\\}"
Спустя некоторое время,я наткнулся на более простое решение этой проблемы.
оно заключается в использовании 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###########
}
Может подойти,как вариант для аналогичных целей.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей