#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) )