Регулярное выражение, как предотвратить совпадение, если за ним следует определенное слово. Что-то вроде взгляда первого персонажа?
Я использую регулярное выражение, чтобы соответствовать, где условия в запросе SQL.
я хочу WHERE <ANY CONDITION>
, но за исключением WHERE ROWNUM <WHATEVER>
,
Так я не хочу ROWNUM
появляться после WHERE
ключевое слово.
Я использовал Lookaheads, чтобы достичь этого. Мое регулярное выражение WHERE (.*(?! ROWNUM )+)
, Проблема в том, что она все еще соответствует WHERE ROWNUM < 1000
, Если я удалю пробел раньше ROWNUM
в регулярном выражении, то любой столбец с именем, заканчивающимся на ROWNUM
не будет соответствовать Если я удалю пробел после WHERE
тогда он будет соответствовать, даже если после WHERE
ключевое слово. Однако, если есть два пробела или любой другой символ между ROWNUM
и WHERE
ключевое слово (может быть условием), тогда все в порядке. Так что если ROWNUM
первый в условии, что мое регулярное выражение не работает.
Как я могу это исправить?
1 ответ
Звучит так, как ты хочешь
WHERE(?!.*\bROWNUM\b).*
который будет соответствовать WHERE .*
, если только .*
содержит ROWNUM
это окружено границами слова. (\b
, "граница слова" - это утверждение нулевой ширины, обозначающее позицию, которой предшествует буква или цифра или подчеркивание или после которой следует буква или цифра или подчеркивание, но не оба.)