Rexgex: Как поймать что-нибудь между круглыми скобками, кроме случаев, когда это между квадратными скобками - PullRequest
2 голосов
/ 11 декабря 2019

Мне нужно регулярное выражение, чтобы поймать что-либо между круглыми скобками, кроме случаев, когда оно находится между следующим шаблоном, символом S, за которым следуют квадратные скобки:

S[]

Как в этом предложении:

I am a (test) S[ but i am (not catched)], catch (me (if you can))
       ^^^^^^                                   ^^^^^^^^^^^^^^^^^   # should be matched
              ^^^^^^^^^^^^^^^^^^^^^^^^^^                            # should not be matched

Это также должно поймать вложенные круглые скобки.

Я пытался заставить его работать, используя различные примеры, но самый близкий я получил это:

(?![^S\[]*\])\(([^()]*|\(([^()]*|\(([^()]*|\([^()]*\))*\))*\))*\)?

=> но это не удалоськогда вы удаляете S из тестового предложения.

Есть идеи, как это сделать?

Редактировать : должно совпадать, как в этом случае, но с Sна учет: https://regex101.com/r/WzECSS/1

Редактировать: этот должен сделать трюк: (?<!S\[[^\]]+)\((?:[^()]|\([^)]*\))+\) спасибо @ ctwheels

...