Как захватить и удалить текст внутри внутренней скобки в Ruby

Я хочу захватить с использованием значений рубина внутри внутренней скобки из следующей строки

textbeforefirstparantheses( (value = "sdfsdf") String countryCode, (value = USER.USER_NAME) final String username, final String grantType)

я хочу иметь

textbeforefirstparantheses( String countryCode, final String username, final String grantType)

Я использую следующий, но он будет захватывать все внутри внешней скобки.

\(.*...\)

Любая помощь?

ПРИМЕЧАНИЕ. При захвате текста также следует включить inner(), как показано в ожидаемом

1 ответ

Легче не пытаться сделать это за один шаг. Во-первых, сопоставьте то, что находится внутри внешних круглых скобок, и внутри sub выполните вторичное совпадение в соответствии с внутренними скобками.

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

'textbeforefirstparantheses( (value = "sdfsdf") String countryCode, (value = USER.USER_NAME) final String username, final String grantType)'
.sub(/(?<=\().*(?=\))/){|s| s.gsub(/\([^)]*\)/, "")}
# => "textbeforefirstparantheses( String countryCode, final String username, final String grantType)"

licensed under cc by-sa 3.0 with attribution.