Это только очень простой процесс SQL синтаксического анализа, не HAVING
, ORDER BY
или GROUP BY
не будет в отчете, который должен быть проанализирован, но что-то соответствие звездочки в SELECT, часть не будет работать (например, SELECT * .......
)Regex - SQL заявление
Вот часть кода:
String span="SELECT * FROM table1 t, table2";
span=span.toUpperCase();
System.out.println(span);
// Segments
String column="(\\w+\\s*(\\w+\\s*){0,1})";
String columns=column+"(,\\s*"+column+")*";
String ownerenable="((\\w+\\.){0,1}\\w+\\s*(\\w+\\s*){0,1})";
String ownerenables=ownerenable+"(,\\s*"+ownerenable+")*";
String from="FROM\\s+"+columns;
String condition="(\\w+\\.){0,1}\\w+\\s*(=|<|>|LIKE|IS)\\s*'?(\\w+\\.){0,1}[\\w%]+'?";
String conditions=condition+"(\\s+(AND|OR)\\s*"+condition+"\\s*)*";
String where="(WHERE\\s+"+conditions+"){0,1}";
String pattern = "SELECT\\s+(\\*|" + ownerenables + "\\s+" + from + ")\\s+" + where + "\\s*" + "(;){0,1}";
System.out.println(pattern);
System.out.println(span.matches(pattern));
Теперь, если я установить срок, чтобы что-то вроде
"SELECT t.id, product p FROM table1 t, table2 WHERE t.id=10;"
Результат матча будет верно
================================
Но если установить его на что-то вроде этого:
"SELECT * FROM table1 t, table2 WHERE t.id=10;"
(это звездочка я использую для SELECT)
Он не будет работать в этом случае
Я делаю что-то неправильно в этой звездочке?
Я не уверен, что регулярное выражение является правильным инструментом для использования здесь ... –
@Maurice Перри Да ... Но я m просто делал простой тест здесь и возникла проблема. – RushSykes
OK. вы можете использовать ? вместо {0,1} –