Поиск элементов в списке операторов SQL - PullRequest
0 голосов
/ 09 октября 2019

Я рассматриваю операторы SQL как строки и хочу подсчитать количество элементов в самом большом списке в запросе SQL. Например, следующая строка будет иметь максимальное число 5:

"select id from table where language in (\"ENGLISH\", \"SPANISH\", \"german\") and id in (1,2,3,4,5);"

Кто-нибудь знает, как это сделать с помощью регулярных выражений? Это сложно, потому что содержимое списка может быть целыми числами, строками или кортежами. Лучшее, что я смог придумать, это следующее:

Используйте https://regex101.com/r/iNOxuO/1, чтобы сначала сопоставить все списки в строке. Затем для каждого из этих совпадений выполните https://regex101.com/r/kowtrV/1, чтобы сопоставить и сосчитать каждый элемент в списке.

Проблема, с которой я столкнулся, состоит в том, что есть несколько крайних случаев (последние две строкив первой ссылке), которые избегают меня.

Спасибо!

1 Ответ

0 голосов
/ 09 октября 2019

Одним из способов было бы написать несколько отдельных выражений для краевых случаев, затем использовать чередование, и тогда вы добавите счетчик. Начальное выражение ядра должно быть таким простым:

(?<=\(|,)[^,]+?(?=\)|,)

Демо 1

Затем, когда вы пишете эти другие, представьте себе

 some other expression 1

и

  some other expression 2

Вы бы присоединили их к логическим ИЛИ:

some other expression 1| some other expression 2|(?<=\(|,)[^,]+?(?=\)|,)

Вы выясните, какое выражение должно быть предшествующим. Написание всех этих выражений занимает много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...