Изменить синтаксис с помощью регулярного выражения - PullRequest
0 голосов
/ 04 августа 2010

У меня есть некоторые унаследованные фрагменты кода унаследованного языка, хранящиеся в таблице базы данных, которые мне нужно преобразовать в синтаксис SQL, чтобы его можно было использовать более эффективно.

Например, один из фрагментов имеет вид

keyword = [a,b,c,x:y,d,e,f,p:q]

для указания либо отдельных значений запятой, либо диапазона значений, разделенных двоеточиями

Как я могу преобразовать это в эквивалентный дружественный к SQL фрагмент, который будет

keyword in (a,b,c) or keyword between x and y or keyword in (d,e,f) or keyword between p and q

Спасибо

1 Ответ

0 голосов
/ 04 августа 2010

Это не регулярное выражение, а первое, что приходит на ум, это извлечение текста в квадратных скобках, поэтому вы

textVariable  = a,b,c,x:y,d,e,f,p:q

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

array[0] = a
...
array[3] = x:y
...

. Затем просмотрите массив и создайте последнюю нужную строку.как то так (хотя и не проверено)

finalString = ""
tempString = ""
for (int i = 0, i < array.length; i++) {
   if (array[i].contains(":")) { // then it needs to be between the two values
      if (finalString.length > 0) {
         finalString = finalString + " or "; // need to add an 'or'
      }
      if (tempString.length > 0) { // then need to add the keyword in (...) to finalString
         finalString = finalString + tempString + ") or ";
      }
      temparray = array[i].split(":")
      finalString = finalString + " keyword between " + temparray[0] + " and " + temparray[1]
   } else {
      if (tempString.length = 0) {
         tempString= "keyword in ("; // need to start the next set
      } else {
         tempString = tempString + ", "
      }
      tempString = tempString + array[i];
   }
} 
...