Как исключить символ, у которого предыдущий символ отличается от указанного в регулярном выражении? - PullRequest
0 голосов
/ 15 апреля 2019

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

Примеры:

input: fo(ob)a)r
output: ob

input: foo(bar\(qwerty\))baz
output: bar\(qwerty\)

Это то, что я использовал для поиска текста в скобках: (?<=\()([^\s\(\)]+)(?=\)), но я не могу сделать исключения для скобок, перед которыми стоит \.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Вы можете сделать что-то вроде этого:

.*(?<!\\)\((.*?)(?<!\\)\)

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

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

Пример: https://regex101.com/r/BqVKZp/1

0 голосов
/ 15 апреля 2019

Это регулярное выражение работает для обоих ваших примеров, без каких-либо предвкушений и наблюдений:

\((.+[^\\])\)

Требуется флаг U.

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