2014-12-17 5 views
0

Я делаю простой язык sql с регулярным выражением, и я разбираю предложение CREATE TABLE, но не работает. Я использую это:Анализ CREATE TABLE sql с regex

reti = regcomp(&regex, "CREATE TABLE [a-zA-Z]\\((.*)\\)", REG_EXTENDED); 

Это что-то простое, я просто делаю это, чтобы узнать ... Что случилось с регулярным выражением?

+0

«Не работает» не является полезным описанием проблемы. Пожалуйста, укажите пример ввода, а также ожидаемый и фактический результат. – IMSoP

ответ

1

Помимо работает только на один буквенных таблиц SQL, вы либо опуская пробела перед открывающимися скобками или, в зависимости от синтаксиса SQL и регулярных выражений/строки, над-спасаясь вашими выражения круглых скобок.

Проверил:

[A-Za-z]+\\s* 

, если он не работает, а знак плюс не признается,

[A-Za-z][A-Za-z]*\\s* 

и является ли это \\\\( или просто \\( (это должно быть последним. Но лучше быть уверенным).

Поддерживаются такие имена, как Antinoo и cUsToMeRs, но не Invoices_New или Suppliers2014. Возможно, вам захочется добавить числа и символы подчеркивания вашему регулярному выражению. Поскольку имена таблиц, вероятно, не начинаются с цифр, вам нужно будет

[A-Z_a-z][A-Z_a-z0-9]*\\s*\\(([^;]*)\\) 
+0

Благодарим за участие. Когда я использую «\ (» или «\ s», компилятор дает мне сообщение об ошибке: предупреждение: неизвестная escape-последовательность: '\ s' [включена по умолчанию]. Поэтому я использую double «\\» – user3476778

+0

My bad. You * что вы использовали C. Так что \\ s правильно, и '\\ (' тоже должно быть (я, кажется, помню какой-то сценарий, в котором мне был нужен \\\\ (', но я больше не могу вспомнить, почему и где На всякий случай, проверка проста). – LSerni

+0

большое спасибо :) – user3476778

Смежные вопросы