Соответствовать конечной скобке, только если она существует - PullRequest
0 голосов
/ 07 октября 2011

Пример:

a) asdf ghjk (qwer . - tzui
b) asdf ghjk (qwer . - tzui)
c) asdf ghjk (qwer . - tzui) opyx

То, что я хочу, это сопоставить (qwer . - tzui в a и (qwer . - tzui) в b и c. Таким образом, если конечная скобка существует, она должна соответствовать только до этого, в противном случае до конца.

Я на самом деле не эксперт по регулярным выражениям, поэтому могу придумать \(.*\) только для второго и третьего случая, что довольно тривиально.

Ответы [ 3 ]

1 голос
/ 07 октября 2011

Попробуйте это

\([^)\n\r]*\)?

Смотрите здесь онлайн на Regexr

? делает предыдущее выражение необязательным, что означает, что закрывающая скобка теперь необязательна.

[^)\n\r] заменяет ваш . на совпадение без жадности и означает совпадение с каждым символом, кроме )\n\r. Я добавил \n\r, чтобы избежать совпадения по строкам, если теперь это проблема, вы можете удалить их и оставить только [^)]

0 голосов
/ 07 октября 2011

Чтобы быть предельно простым, вы можете сделать:

\(.*\)?

Так что последняя скобка становится необязательной. Дайте мне знать, если это сработает для вас.

0 голосов
/ 07 октября 2011

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

Полное регулярное выражение будет выглядеть следующим образом:

\\(.*\\)?

(двойная обратная косая черта необходима, если регулярное выражение вводится в виде строки Java).

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