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

288
03 мая 2018, 10:08

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

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

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

Answer 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 ...");
}

Полезно посмотреть:

  1. Исходники класса Pattern.
  2. Документация Pattern
  3. Пример использования: match-multiline-text-using-regular-expression
  4. java-regex-tester

П.С. Еще пример регулярного выражения от активного участника "(?ms)(?:ParName\\{)([^}]*)\\}"

Answer 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###########
}

Может подойти,как вариант для аналогичных целей.

READ ALSO
Размер отрисовки OpenGL слишком большой

Размер отрисовки OpenGL слишком большой

Пытаюсь вывести квадрат размера 1x1 на экран в OpenGL, он должен рендериться на весь экран, так как координаты OpenGL 1x1, но он почему- то выводится...

289
Правило выбора квалификатора ресурсов

Правило выбора квалификатора ресурсов

Имеются папки values и values-xhdpi

266
Как хранятся RGB Значения в DataBufferByte

Как хранятся RGB Значения в DataBufferByte

мне нужно из rgb значений DataBufferByte сделать массив нормализованных цветовых значений (float[]{0, 0, 01, 0

223
Байт в массив из битов

Байт в массив из битов

Как получить массив состоящий из 8 бит от одного символа ? Как я понял нужно сначала перевести символ в байт, но дальше у меня проблемы

252