2016-02-24 3 views

ответ

1

Кажется, вы используете регулярное выражение PCRE, чтобы получить номера, которые могут быть предшествовавшие с математическими операторами внутри (...), который не имеет никакого внутреннего ().

Использование

(?:\(|(?!^)\G)\K[+*\/-]?\d+(?=[^()]*\)) 

См regex demo

Объяснение:

  • (?:\(|(?!^)\G)\K - Найти ( или конец предыдущего успешного матча, и опустить текст соответствия в настоящее время хранящийся в памяти (с \K)
  • [+*\/-]? - один или ноль операторов
  • \d+ - один или несколько цифр
  • (?=[^()]*\)) - но только если следуют другие ноль или более символов, чем ( и ) до закрытия ).

Обратите внимание, что в своем регулярном выражении, вы опускаете математические операторы, так как они, прежде чем \K и вы найдете номера после операторов математических или ( (и после окончания каждого удачного матча, поэтому вы получаете 1, 7, 9, 51.

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