Регулярное выражение, как предотвратить совпадение, если за ним следует определенное слово.Что-то вроде взгляда первого персонажа? - PullRequest
3 голосов
/ 06 марта 2012

Я использую регулярное выражение для сопоставления с условиями в запросе SQL.

Я хочу WHERE <ANY CONDITION>, но за исключением WHERE ROWNUM <WHATEVER>.
Поэтому я не хочу, чтобы ROWNUM появлялся после ключевого слова WHERE.

Я использовал Lookaheads для достижения этой цели.Мое регулярное выражение WHERE (.*(?! ROWNUM )+).Проблема в том, что он все еще соответствует WHERE ROWNUM < 1000.Если я удалю пробел перед ROWNUM в регулярном выражении, то любой столбец с именем, заканчивающимся на ROWNUM, не будет совпадать.Если я удалю пробел после WHERE, он совпадет, даже если после ключевого слова WHERE пробела не будет.Однако если между ROWNUM и ключевым словом WHERE есть два пробела или любой другой символ (это может быть условием), тогда все в порядке.Поэтому, если ROWNUM является первым условием, мое регулярное выражение не работает.

Как это можно исправить?

1 Ответ

2 голосов
/ 06 марта 2012

Звучит так, как вы хотите

WHERE(?!.*\bROWNUM\b).*

, что будет соответствовать WHERE .*, , если .* не содержит ROWNUM, который окружен границами слов.(\b, «граница слова» - это утверждение нулевой ширины, обозначающее позицию, которой предшествуют буква, цифра или подчеркивание или , за которыми следует буква, цифра или подчеркивание, , но неи .)

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