Я пишу библиотеку классов ac #, которая позволит мне сканировать запрос сервера SQL и извлекать объекты из запроса в их правильные группировки, например:
SELECT * FROM "My Server"."Northwind"."dbo"."Product Sales for 1997" Group By CategoryID
Это регулярное выражение будет соответствовать приведенному вышеСтрока и группа «Мой сервер», «Northwind», «dbo» и «Продажи продуктов за 1997 год» в четыре группы, и это то, что я хочу.
(?i)\bFROM\b\s+[\["]([^\]"]*)[\]"].{1}[\["]([^\]"]*)[\]"].{1}[\["]([^\]"]*)[\]"].{1}[\["]([^\]"]*)[\]"].{1}
Я ищу только одно регулярное выражениевыражение, которое может захватывать имя сервера, имя базы данных, имя схемы и имя объекта для любой из следующих комбинаций (это не исчерпывающий список любыми способами):
SELECT * FROM dbo."Product Sales for 1997" // should return groups 2 & 3
SELECT * FROM Northwind."My Schema"."My view or table function" // should return groups 1, 2 & 3
SELECT * FROM "My view or table function" // should return group 3
SELECT * FROM dbo."My View 1" AS V1 JOIN "My View 1" AS V2 ON V1.ID = V2 // should return groups 2 & 3
Другими словами, я хочу захватитьразличные компоненты в следующие группы:
Группа 0 -> Имя сервераГруппа 1 -> Имя базы данныхГруппа 2 -> СхемаГруппа 3 -> Имя объекта
Я пытаюсь избежать создания нескольких выражений регулярных выражений, чтобы обрабатывать каждую возможную комбинацию, чтобы моя библиотека классов не стала слишком большой и сложной, но как регулярное выражение n00b это оказалось немного сложным.