2012-06-14 7 views
1

У меня есть большая проблема с регулярными выражениями в JAVA (потратьте 3 дня !!!). это моя входная строка:Java регулярное выражение вложенное

#sfondo: [#nome: 0, #imga: 0],#111: 222, #p: [#ciccio:aaa, #caio: bbb] 

Мне нужно разобрать эту строку дерева массива, должны соответствовать следующим образом:

group: #sfondo: [#nome: 0, #imga: 0] 
group: #111: 222 
group: #p: [#ciccio:aaa, #caio: bbb] 

с или wythout вложенными скобками

Я судимое это:

"#(\\w+):(.*?[^,\]\[]+.*?),?" 

но эта группа по каждому элементу раздельно с "," также внутри bracke ц

ответ

0

Это похоже на работу для примера:

String input = "#sfondo: [#nome: 0, #imga: 0],#111: 222, #p: [#ciccio:aaa, #caio: bbb]"; 
    String regex = "#\\w+: (\\[[^\\]]*\\]|[^\\[]+)(,|$)"; 
    Pattern p = Pattern.compile(regex); 
    Matcher matcher = p.matcher(input); 
    List<String> matches = new ArrayList<String>(); 
    while (matcher.find()) { 
     String group = matcher.group(); 
     matches.add(group.replace(",", "")); 
    } 

EDIT:
Это работает только для вложенной глубины одного. Невозможно обработать вложенную структуру произвольной глубины с помощью регулярного выражения. См. this ответ для дальнейших объяснений.

+0

Спасибо lot.This отлично работают, но не с вложенными скобками, как: «#sfondo: [#nome: 0, #imga: 0], # 111: 222, #p: [#ciccio: aaa, #caio: bbb, #ggg: [#fff: aaa]] "(см.« #ggg ») –

+0

Это правильно: String regex =" (# [^, \\ [\\]] + (?.? \\ [\\ *] +)?) "; –

+0

Это не работает для следующей строки: «#sfondo: [#nome: 0, #imga: 0], # 111: 222, #p: [#ciccio: aaa, #ggg: [#fff: aaa], #caio: bbb] " – Keppil

3

Попробуйте это:

import java.util.regex.*; 

class Untitled { 
    public static void main(String[] args) { 
    String input = "#sfondo: [#nome: 0, #imga: 0],#111: 222, #p: [#ciccio:aaa, #caio: bbb]"; 
    String regex = "(#[^,\\[\\]]+(?:\\[.*?\\]+,?)?)"; 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(input); 

    while (matcher.find()) { 
     System.out.println("group: " + matcher.group()); 
    } 
    } 
} 
+0

Отлично !!! Это то, что я посмотрел, у меня нет слов для жадности ... –

+0

небольшой выход: результат: #p: [#ciccio: aaa, #caio: bbb, #ggg: [#fff: aaa] shuld be: #p: [#ciccio: aaa, #caio: bbb, #ggg: [#fff: aaa]] –

+0

См. обновленный код в моем ответе, я слегка его изменил – ioseb

Смежные вопросы