Я работаю над этим уже несколько часов и не могу найти никакой помощи по этому вопросу.По сути, я пытаюсь разбить строку SQL на различные части (поля, откуда, где, groupBy, orderBy).Я отказываюсь верить, что я первый человек, который когда-либо пытался сделать это, поэтому я хотел бы попросить совета от сообщества StackOverflow.:)
Чтобы понять, что мне нужно, предположим следующую строку SQL:
select * from table1 inner join table2 on table1.id = table2.id
where field1 = 'sam' having table1.field3 > 0
group by table1.field4 order by table1.field5
Я создал регулярное выражение для соответствующей группировки частей:
select\s+(?<fields>.+)\s+from\s+(?<from>.+)\s+where\s+(?<where>.+)\s+having\s+(?<having>.+)\s+group\sby\s+(?<groupby>.+)\s+order\sby\s+(?<orderby>.+)
Этодает мне следующие результаты:
fields => *
from => table1 inner join table2 on table1.id = table2.id
where => field1 = 'sam'
having => table1.field3 > 0
groupby => table1.field4
orderby => table1.field5
Проблема, с которой я столкнулся, заключается в том, что если любая часть строки SQL отсутствует после предложения 'from', регулярное выражениене совпадает
Чтобы исправить это, я попытался поместить каждую необязательную деталь в отдельную группу (...)?
, но это не работает.Он просто помещает все необязательные части (где, имея, groupBy и orderBy) в группу «из».
Есть идеи?