Регулярное выражение для получения строки внутри круглых скобок в Java? (включая другие круглые скобки внутри круглых скобок)

#java #regex

#java #регулярное выражение

Вопрос:

Я хочу получить всю строку внутри самых первых круглых скобок

Например, если входные :

«1 2 ( 1 2 (1 2) ) «

Он вернет

[( 1 2 (1 2) )]

Если входные :

«1 (1 2 (1 2 (1 2) ) )»

Он вернет

[«(1 2 (1 2 (1 2) ) )»]

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

1. Нет, вы не можете, регулярные выражения — неподходящий инструмент для этого. Вы можете написать очень простую функцию, которая перебирает строку, отслеживая уровень вложенности скобок. Во время цикла копируйте символы в выходную строку только в том случае, если уровень вложенности равен 1 или больше.

2. Здесь вам нужен синтаксический анализатор . Одним из ограничений регулярных выражений является то, что они не могут выполнять подсчет, необходимый для сопоставления произвольного количества открывающих и закрывающих фигурных скобок.

3. Для того, что вам просто нужно сделать, зачем использовать регулярное выражение? Просто используйте: String strg = equationString.substring(equationString.indexOf("("), (equationString.lastIndexOf(")") 1)); .

Ответ №1:

Вы можете использовать классы Pattern amp; Matcher для извлечения того, что вы хотите, следующим образом

    String input = "1   (1   2   (1   2   (1   2) ) )";
   String regexp =  "(\()(.*)(\))";

   Pattern pattern = Pattern.compile(regexp);
   Matcher matcher = pattern.matcher(input);


   while(matcher.find()) {

       System.out.println(matcher.group(2));
   }
  

Вывод

1 2 (1 2 (1 2) )