регулярка + sql

Статус
В этой теме нельзя размещать новые ответы.

romy4

invoke [brain]
регулярка + sql

Есть sql создания таблицы, из него выдрана основная часть типа

Код:
  `fact_id` int(10) unsigned NOT NULL auto_increment,
  `aid_id` int(11) NOT NULL,
...
  PRIMARY KEY  (`fact_id`),
  UNIQUE KEY `UNIQUE_ROW` (`date_id`,`hour`,`...`),
  KEY `date` (`date_id`,`hour`)
)
необходимо разбить по (",") запятой разделяющий дефиницию полей, при чем дефиниция ключа должа тоже выбираться.
помогите с регуляркой.

updесть выход сплитать по \n (перевод строки) а затем тримать (",") запятые в конце, но не факт, что всегда sql будет четко по дефинициям разделен на строки
 

Андрейка

Senior pomidor developer
необходимо разбить по (",") запятой
в смысле сплитать по ","? ну а в чем проблема тогда просплитать все дефиниции и зачем там регулярки?
 

Anarki

Новичок
А что мешает использовать split и в качестве разделителя - запятую, удалить служебные символы если нужно(\r\n), сохранить в массив. А потом отбросить предпредпоследний и предпоследний элементы массива(это которые определяют PRIMARY,UNIQUE), если нужно?
Если я правильно понял.
 

romy4

invoke [brain]
проблема в том, что, например, могут быть такие строки, в которых содержаться запятые, как часть дефиниции

вот как в ключе:
KEY `UNIQUE_ROW` (`date_id`,`hour`,`...`),

если сделать простой сплит, то будет не правильно разбито
 

Андрейка

Senior pomidor developer
значит сплитать адекватно не получится.. описание всех дефиниций в руки и вперед писать регулярку для preg_match_all
 

Anarki

Новичок
Ясно, не учел этот факт что-то :)
Тогда для выцепления определений полей можно попробовать такое регулярное выражение
Код:
/\s*(`.*?`\s+(?:int|char|float).+?,)/i
Тут нужно добавить типов double, real, decimal, numeric, чтобы универсальней было
А для выцепления ключей - такое
Код:
/\s*((?:PRIMARY|UNIQUE)*\s*(KEY.*?\)),*)/i
 

romy4

invoke [brain]
Андрейка
именно это и было вопросом поста:)

-~{}~ 08.05.07 17:59:

Anarki
пасиб
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху