mysql - SQL RegEx Create Split: Include SET -
i'm writing regex pattern split mysql create
statements column definition arrays. far, works great aside set
columns. here's process:
$lines = explode("\n", $create_sql); foreach ($lines $line) { $line = str_replace('not null', 'not_null', $line); $pattern = '/`(.*)`[\s]*([^\s]*)[\s]*(not_null|null)[\s]*(.*),/'; $search = preg_match($pattern, $line, $matches); if ($search !== false && count($matches) === 5) { $columns[$matches[1]] = array( 'type' => $matches[2], 'null' => $matches[3] === 'null', 'extra' => $matches[4], ); } }
this process works great on column definition this:
`id` int(11) not null auto_increment,
...but fails on set
columns. how can best accommodate quotes , parentheses in line?
`platform` set('ios', 'android') null default null,
to summarize, need integrate pattern match set('one', 'two', n)
in string.
first let modify pattern expression, first readability (\s*
instead of [\s]*
), ensure working lowercase statements :
$pattern = '/`(.*)`\s*([^\s]*)\s*(not_null|null)\s*(.*),/i';
then, answer question, prepare pattern depending on set
present or not in line:
$sub_pattern = stripos($line, ' set(') ? 'set\([^\)]*\)\s*[^\s]*' : '[^\s]*'; $pattern = '/`(.*)`\s*(' . $sub_pattern . ')\s*(not_null|null)\s*(.*),/i';
note that, however, code not secured against syntax errors in source lines.
Comments
Post a Comment