совпадение регулярных выражений, только если подстрока является единственным случаем, и не совпадает, если подстрока плюс что-то еще

#java #regex

#java #регулярное выражение

Вопрос:

Это немного сложно. итак, пример может помочь

Я хочу сопоставлять / группировать значения только из следующего типа строки

SELECT hello,world from tableName where id = 'hello';

и НЕ

SELECT hello,world FROM tableName where id='hello' and blah='jjk';

SELECT hello from tableName where blah='jjk' and id='hello';

Как вы можете видеть, я хочу сопоставлять только where id = 'hello' единственное предложение where, которое присутствует.

Я хочу сгруппировать, чтобы получить имена столбцов, имя таблицы и идентификатор;

Вот регулярное выражение, которое я создаю, но оно обрабатывает все вышеперечисленное.

ПРИМЕЧАНИЕ: значение id имеет фиксированную длину. То есть это всегда 5 символов.

Ответ №1:

Как насчет этого? Кажется, делает то, что вы просили.

 SELECTs (.*)s FROMs (.*)[s] ?wheres ids*=s*('[a-z]{5}')s*;$
  

Ссылка Regex101 с некоторыми тестами:https://regex101.com/r/anRIrL/3/tests

Комментарии:

1. как насчет того, чтобы «ВЫБРАТЬ», «ОТКУДА» и «Где» не учитывали регистр?

2. Тогда добавьте флаг без учета регистра в ваше регулярное выражение. В Java это делается путем вставки (?i) в начале или с Pattern.compile(patternString, Pattern.CASE_INSENSITIVE) .