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

Я использую регулярное выражение, чтобы соответствовать, где условия в запросе 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, "граница слова" - это утверждение нулевой ширины, обозначающее позицию, которой предшествует буква или цифра или подчеркивание или после которой следует буква или цифра или подчеркивание, но не оба.)

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