Выражение C # Regex для извлечения имени поля и значений в условии SQL - PullRequest
0 голосов
/ 24 апреля 2019

Рассмотрим следующие 2 условия SQL.

1.) AssetView.[PROPTYPE] NOT IN ('B15/30','SFD','SFA')

2.) AssetView.[FICO] IN (500,600,700)

Я хочу разбить этот SQL с помощью RegEx, чтобы я мог иметь имя таблицы, имя поля, тип функции и значения поля на 4 разные части.

, например

  • Имя таблицы - AssetView
  • Имя поля - PROPTYPE
  • Функция - НЕ В
  • Значения полей (вместе или отдельно): B15 / 30, SFD, SFA

Вот регулярное выражение, которое я пробовал (https://rubular.com/r/WGiyz0oGrooyiA), но я не могу разделить TableName, Имя поля и Тип функции на отдельную группу.

(.*?)[^=]['(]+(.*?)[')]

1 Ответ

1 голос
/ 24 апреля 2019

В вашем шаблоне (.*?)[^=]['(]+(.*?)[')] вы используете классы символов ['(] и [')], которые соответствуют любому из перечисленных и могут также сначала соответствовать открытию ', а затем закрытию )

В качестве примера вы можете использовать:

(\w+)\.\[(\w+)\] +(\w+(?: \w+)*) +\(([^)\n]+)\)
  • (\w+) Захват 1+ слов в группе 1
  • \. Совпадение с точкой
  • \[(\w+)\] + Захват 1+ слов символов в квадратных скобках в группе 2 и пробелах 1+
  • (\w+(?: \w+)*) + Захват 1+ слов слов с последующим повторением 0+ раз совпадения пробелов и 1+ слов в группе3 и 1+ пробелы
  • \(([^)\n]+)\) Захват 1+ раз не закрывающая или новая строка между круглыми скобками в группе 4

Регулярное выражение | .NET regex (щелкните на вкладке Таблица)

Если вы хотите разрешить совпадение большего числа символов, чем \w, вы можете расширить его, используя класс символов.

Например, если вы также хотите разрешить использование дефиса и пробела [\w-]+ или если вы хотите сопоставить все в скобках, вы можете использовать класс отрицательных символов, например \[([^\]]+)\]

...