Regex - Соответствует предложению, избегая скобок

Мне нужно было бы сделать регулярное выражение, чтобы соответствовать ключевым словам внутри большого текста.

Пример большого текста может быть следующим:

... другое предложение, заканчивающееся ключевыми словами: тег 1, тег 2, тег 3 (может содержать что-то вроде этого ссылки 1), тег 4 и тег 5. Другое предложение началось...

Регулярное выражение должно извлечь:

Ключевые слова: тег 1, тег 2, тег 3 (может содержать что-то подобное ссылка 1), тег 4 и тег 5

У меня есть следующий код:

\bKeywords:[^\.]+

Но проблема в том, что регулярное выражение не избегает текста внутри скобок и останавливается с точкой на "..ref. 1..".

Спасибо вам всем!

Примечание: слово "тег" это пример, это может быть любое слово.

1 ответ

Решение

Предполагая, что паразиты не могут быть вложенными: Keywords: (?:[^(.]|\([^)]*\))*,

Я соответствую:

(?:[^(.]|\([^)]*\))*
                   * as many times as possible
(?:               )  non-capturing
        |            either:
   [^(.]             a character that's not an opening paranthesis or a dot, or
         \(     \)   inside literal parantheses
           [^)]*     as many characters that aren't closing parantheses as possible

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

Другие вопросы по тегам