Я пробовал разбор MySQL дампа для автоматического создания миграций.Ошибка повторения символа регулярного выражения
отбрасывания базы данных анализируется с:
preg_match_all('/DROP TABLE.+`.+`(.+|.?);/', $this->contents, $this->dropTableBlock);
Но создать таблицы запроса возвращают ложные и пустой массив:
preg_match_all('/CREATE TABLE.+`.+`.+\(.+\).+(ENGINE=.+)?.+(DEFAULT CHARSET=[.]{1,5});/is', $this->contents, $this->createTableBlock);
На regex101.com, что совпадает нужны строки: https://regex101.com/r/eD8wI5/1
Скажи пожалуйста, почему preg_match_all ничего не находит?
Вы можете еще больше повысить производительность [например, в regex101] (https://regex101.com/r/pD0xL0/1) (также для соответствия движку). –
Это не работа для регулярного выражения. Вы должны использовать синтаксический анализатор SQL, например, этот: https://github.com/greenlion/PHP-SQL-Parser –
Не является '(. + |.?)' Таким же, как '(. *)' Но даже это не имеет смысла. –