Строка:только одна группа захвата несколько раз
50-60*70/50+(1+7-(9+51))+5*9/10
Want:
9 +51
Пробовал:
(?:\(|\G[\+\*\/-])\K(\d+)
Результат:
1 7 9 51
Строка:только одна группа захвата несколько раз
50-60*70/50+(1+7-(9+51))+5*9/10
Want:
9 +51
Пробовал:
(?:\(|\G[\+\*\/-])\K(\d+)
Результат:
1 7 9 51
Кажется, вы используете регулярное выражение PCRE, чтобы получить номера, которые могут быть предшествовавшие с математическими операторами внутри (...)
, который не имеет никакого внутреннего ()
.
Использование
(?:\(|(?!^)\G)\K[+*\/-]?\d+(?=[^()]*\))
См regex demo
Объяснение:
(?:\(|(?!^)\G)\K
- Найти (
или конец предыдущего успешного матча, и опустить текст соответствия в настоящее время хранящийся в памяти (с \K
)[+*\/-]?
- один или ноль операторов\d+
- один или несколько цифр(?=[^()]*\))
- но только если следуют другие ноль или более символов, чем (
и )
до закрытия )
.Обратите внимание, что в своем регулярном выражении, вы опускаете математические операторы, так как они, прежде чем \K
и вы найдете номера после операторов математических или (
(и после окончания каждого удачного матча, поэтому вы получаете 1
, 7
, 9
, 51
.