Как вы определяете шаблон, чтобы найти все выражения в фигурных скобках - PullRequest
0 голосов
/ 26 января 2019
String input = (1+(4+5+2)-3)+(6+8)

Как вы определяете регулярное выражение, которое может дать

4 + 5 + 2 и 6 + 8.

String pattern = "(\\([\d\\+\\-]\\))";

Кажется, не работает.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

В вашем регулярном выражении (\\([\d\\+\\-]\\)) вы должны использовать квантификатор , как +, чтобы повторить класс символов и заметить, что внутри класса символов знак плюса не долженбыть экранированным, а также дефис не должен быть экранирован, поскольку он является последним символом класса символов.

В этом случае регулярное выражение будет выглядеть как (\\([\d+-]+\\)), но это также будет включать сопоставление внешних скобок.

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

Класс персонажа [\d+-]+ также будет соответствовать, например, ---, что, я думаю, не то, что вы хотите.Вы можете, например, сначала сопоставить цифры, а затем повторяющийся шаблон, который соответствует + или -, а затем снова цифры, чтобы сохранить структуру выражения.Например:

\\((\\d+(?:[+-]\\d+)+)\\)

Пояснение

  • \\( Совпадение (
  • ( Группа захвата
    • \\d+ Совпадение 1+ цифр
    • (?:[+-]\\d+)+ Группа без захвата, которая соответствует + или -, затем 1+ цифр и повторяется 1+ раз.
  • ) Закрыть группу захвата
  • \\) Совпадение )

Regex demo

0 голосов
/ 26 января 2019

Вы могли бы сделать \(([^\(\)]+)\), но в скобках он найдет только самое внутреннее.У вас может быть следующий ввод

(1+(4+((5*2)+3)+2)-3)+(6+8)

, и в результате вы получите

Match 1
Full match  7-12    (5*2)
Group 1.    8-11    5*2

Match 2
Full match  22-27   (6+8)
Group 1.    23-26   6+8

. Если возможно, вы должны стараться не использовать регулярные выражения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...