2016-11-17 2 views
1

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

Например моя строка

String str = "(A(B(C(D(x)))))"; 

Я хочу, чтобы напечатать все вложенные строки, которые лежат в пределах любой пары скобок:

A(B(C(D(x)))) 
    B(C(D(x))) 
    C(D(x)) 
    D(x) 
    x 

Я попытался с помощью регулярных выражений:

 Matcher m = Pattern.compile("\\((.*?)\\)").matcher(str); 
     while (m.find()) { 
      System.out.println(m.group(1)); 
     } 

Но это только извлекает подстроку, найденную между первой парой круглых скобок.

+0

Я не думаю, что это можно будет решить таким образом, потому что совпадающие сбалансированные круглые скобки невозможны с регулярными выражениями. Не со стандартным синтаксисом (насколько я помню, .NET имеет что-то для балансировки). – siarheib

ответ

1

Я разработал то, что вы просили, но не только с регулярным выражением, но и с рекурсивной функцией. Пожалуйста, проверьте следующий код:

public static void main(String[] args) 
{ 
    String str = "(A(B(C(D(x)))))"; 
    findStuff(str); 

} 

public static void findStuff(String str){ 
    String pattern = "\\((.+)\\)"; 

    Pattern p = Pattern.compile(pattern); 
    Matcher m = p.matcher(str); 
    while (m.find()) 
    { 
     String sub = m.group(1); 
     System.out.println(" Word: " + sub); 

     findStuff(sub); 
    } 
} 
+0

Но это не работает с этим типом строки '((A (B)) ... (C))' – parul71625

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