<?
function parse($sql) {
$RE1="\n(?P<comment>\/\*.*?\*\/)\n"; // комментарий
$RE2=<<< HEREDOC
(?P<quote>
" # кавычка внутри которой
(?:
(?:\\\\.)++ | # что-то экранированное или
[^"\\\\]++ | # не кавычка и не слэш
)? # или вообще ничего внутри кавычек
"
)
HEREDOC;
$RE3= "\n(?P<endcomment>--[^\\n]++)\n"; // комментарий до конца строки
// поместим все комменты в массив
$RE4=<<< HEREDOC
[^"\/-]++ | # не кавычка и не слэш и не тире
$RE2 | # что-то в кавычках
$RE1 | # многострочный коммент
$RE3 | # однострочный
[-\/] # тире или слэш (открытая кавычка подразумевает наличие закрывающей)
HEREDOC;
$RE5= <<< HEREDOC
(?<query>
(?:
[^";]++ | # не кавычка и не точка с запятой
$RE2 # что-то в кавычках
)+
;
)
HEREDOC;
"/$RE4/xs",
function($data) use (&$res) {
if ($data["comment"] || $data["endcomment"]) {
$res["comments"][]=$data["comment"]?$data["comment"]:$data["endcomment"];
return "";
};
return $data[0];
},
$sql);
$res["queryes"]=$temp[0];
return $res;
};
?>
PD8KJHRleHQ9ZmlsZV9nZXRfY29udGVudHMoInBocDovL3N0ZGluIik7CgpmdW5jdGlvbiBwYXJzZSgkc3FsKSB7CiRyZXM9QXJyYXkoImNvbW1lbnRzIj0+IEFycmF5KCksICJxdWVyeWVzIj0+QXJyYXkoKSk7CiRSRTE9IlxuKD9QPGNvbW1lbnQ+XC9cKi4qP1wqXC8pXG4iOyAvLyDQutC+0LzQvNC10L3RgtCw0YDQuNC5CiRSRTI9PDw8IEhFUkVET0MKKD9QPHF1b3RlPgogICAgIiAgICAgICAgICAgICAgICAgICMg0LrQsNCy0YvRh9C60LAg0LLQvdGD0YLRgNC4INC60L7RgtC+0YDQvtC5CiAgICAoPzogCiAgICAgICAgKD86XFxcXC4pKysgfCAgIyDRh9GC0L4t0YLQviDRjdC60YDQsNC90LjRgNC+0LLQsNC90L3QvtC1INC40LvQuAogICAgICAgIFteIlxcXFxdKysgICAgfCAgIyDQvdC1INC60LDQstGL0YfQutCwINC4INC90LUg0YHQu9GN0YgKICAgICk/ICAgICAgICAgICAgICAgICAjINC40LvQuCDQstC+0L7QsdGJ0LUg0L3QuNGH0LXQs9C+INCy0L3Rg9GC0YDQuCDQutCw0LLRi9GH0LXQugogICAgIgopCgpIRVJFRE9DOwokUkUzPSAiXG4oP1A8ZW5kY29tbWVudD4tLVteXFxuXSsrKVxuIjsgLy8g0LrQvtC80LzQtdC90YLQsNGA0LjQuSDQtNC+INC60L7QvdGG0LAg0YHRgtGA0L7QutC4CgovLyDQv9C+0LzQtdGB0YLQuNC8INCy0YHQtSDQutC+0LzQvNC10L3RgtGLINCyINC80LDRgdGB0LjQsgokUkU0PTw8PCBIRVJFRE9DClteIlwvLV0rKyB8ICMg0L3QtSDQutCw0LLRi9GH0LrQsCDQuCDQvdC1INGB0LvRjdGIINC4INC90LUg0YLQuNGA0LUKJFJFMiB8ICMg0YfRgtC+LdGC0L4g0LIg0LrQsNCy0YvRh9C60LDRhQokUkUxIHwgIyDQvNC90L7Qs9C+0YHRgtGA0L7Rh9C90YvQuSDQutC+0LzQvNC10L3RggokUkUzIHwgIyDQvtC00L3QvtGB0YLRgNC+0YfQvdGL0LkKWy1cL10gICMg0YLQuNGA0LUg0LjQu9C4INGB0LvRjdGIICjQvtGC0LrRgNGL0YLQsNGPINC60LDQstGL0YfQutCwINC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQtdGCINC90LDQu9C40YfQuNC1INC30LDQutGA0YvQstCw0Y7RidC10LkpCgpIRVJFRE9DOwoKJFJFNT0gPDw8IEhFUkVET0MKKD88cXVlcnk+CiAgICAoPzoKICAgICAgICBbXiI7XSsrIHwgIyDQvdC1INC60LDQstGL0YfQutCwINC4INC90LUg0YLQvtGH0LrQsCDRgSDQt9Cw0L/Rj9GC0L7QuQogICAgICAgICRSRTIgIyDRh9GC0L4t0YLQviDQsiDQutCw0LLRi9GH0LrQsNGFCiAgICApKyAgCiAgICA7CikKCkhFUkVET0M7CiRzcWw9cHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgIi8kUkU0L3hzIiwKICAgIGZ1bmN0aW9uKCRkYXRhKSB1c2UgKCYkcmVzKSB7CiAgICAgICAgaWYgKCRkYXRhWyJjb21tZW50Il0gfHwgJGRhdGFbImVuZGNvbW1lbnQiXSkgewogICAgICAgICAgICAkcmVzWyJjb21tZW50cyJdW109JGRhdGFbImNvbW1lbnQiXT8kZGF0YVsiY29tbWVudCJdOiRkYXRhWyJlbmRjb21tZW50Il07CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9OwogICAgICAgIHJldHVybiAkZGF0YVswXTsKICAgIH0sCiAgICAkc3FsKTsKcHJlZ19tYXRjaF9hbGwoIi8kUkU1L3hzIiwgJHNxbCwgJHRlbXApOwokcmVzWyJxdWVyeWVzIl09JHRlbXBbMF07CnJldHVybiAkcmVzOwp9OwoKdmFyX2R1bXAocGFyc2UoJHRleHQpKTsKPz4=
LyogJnF1b3Q7ICovIGluc2VydCBpbnRvIHRhYmxlIHQgdmFsdWVzICgmcXVvdDtcJnF1b3Q7JnF1b3Q7LCAmcXVvdDstLSZxdW90OywgJnF1b3Q7LyomcXVvdDspOyAvKiAtLSAqLwpEUk9QIERBVEFCQVNFOyAtLSB5ZXMhCg==
/* " */ insert into table t values ("\"", "--", "/*"); /* -- */
DROP DATABASE; -- yes!