В основном я хочу сопоставить имя таблицы из запроса SQL. Запрос может быть объединенным запросом или обычным запросом с предложением where. Когда это соединение, я знаю, как сопоставить имя таблицы и ее псевдоним. Но когда это не объединение, я просто хочу найти имя таблицы и не соответствовать "где". Если мне не хватает места, нужно также указать имя таблицы.
Пока это мое регулярное выражение: "(? <= FROM | JOIN | ON) (\ s + \ w + \ b. \ W + | \ s + \ w + \ b | \ s + £ \ w + \ b) (\ s + \ ш +) "</p>
Это будет совпадать с именем таблицы перед именем from, join или на том же псевдониме.
То, что выберет псевдоним, - (\ s + \ w +), и я хочу исключить ГДЕ оттуда, я попытался [^ ГДЕ], но это не имеет последствий для результата. И я действительно не знаю, как еще я могу сделать то, с чем я пытался?! Где, но ничего не делает, это соответствует только имени таблицы и где.
(?<=FROM|JOIN|ON)(\s+\w+\b\.\w+|\s+\w+\b|\s+£\w+\b)(\s+\w+)
Это мое текущее регулярное выражение.
Вы можете проверить это здесь:
https://regex101.com/r/01hUXM/1/
Я пытаюсь сопоставить «Таблица T1», «Таблица T2», «somwhere», «там».
И до сих пор я могу сопоставить только «Таблица T1» и «Таблица T2». Я не могу понять, как соответствовать двум другим. Если я попробую что-то вроде from\s+(\w+)
, оно также совпадет с теми, что в соединении, но без псевдонима, и я не хочу этого.
EDIT:
(<= С |? РЕГИСТРИРУЙТЕСЬ | ВКЛ) (\ S + \ W + \ Ъ \ W + |. \ S + \ W + \ Ъ | \ S + £ \ W + \ б) (\ S + \ W +) | от \ с ( \ ш +) </p>
Это основная идея, которую я хочу. Первый выбирает TableName и псевдоним, а второй - только OR tablename (в группе). Но по какой-то причине ИЛИ отменяет первый выбор, если он может быть применен к результату первого шаблона