#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)
.