<?
$text=<<< HEREDOC
/* " */ insert into table t values ("\"", "--", "/*"); /* -- */
DROP DATABASE; -- yes!
HEREDOC;
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;
};
?>
PD8KJHRleHQ9PDw8IEhFUkVET0MKLyogIiAqLyBpbnNlcnQgaW50byB0YWJsZSB0IHZhbHVlcyAoIlwiIiwgIi0tIiwgIi8qIik7IC8qIC0tICovCkRST1AgREFUQUJBU0U7IC0tIHllcyEKSEVSRURPQzsKCmZ1bmN0aW9uIHBhcnNlKCRzcWwpIHsKJHJlcz1BcnJheSgiY29tbWVudHMiPT4gQXJyYXkoKSwgInF1ZXJ5ZXMiPT5BcnJheSgpKTsKJFJFMT0iXG4oP1A8Y29tbWVudD5cL1wqLio/XCpcLylcbiI7IC8vINC60L7QvNC80LXQvdGC0LDRgNC40LkKJFJFMj08PDwgSEVSRURPQwooP1A8cXVvdGU+CiAgICAiICAgICAgICAgICAgICAgICAgIyDQutCw0LLRi9GH0LrQsCDQstC90YPRgtGA0Lgg0LrQvtGC0L7RgNC+0LkKICAgICg/OiAKICAgICAgICAoPzpcXFxcLikrKyB8ICAjINGH0YLQvi3RgtC+INGN0LrRgNCw0L3QuNGA0L7QstCw0L3QvdC+0LUg0LjQu9C4CiAgICAgICAgW14iXFxcXF0rKyAgICB8ICAjINC90LUg0LrQsNCy0YvRh9C60LAg0Lgg0L3QtSDRgdC70Y3RiAogICAgKT8gICAgICAgICAgICAgICAgICMg0LjQu9C4INCy0L7QvtCx0YnQtSDQvdC40YfQtdCz0L4g0LLQvdGD0YLRgNC4INC60LDQstGL0YfQtdC6CiAgICAiCikKCkhFUkVET0M7CiRSRTM9ICJcbig/UDxlbmRjb21tZW50Pi0tW15cXG5dKyspXG4iOyAvLyDQutC+0LzQvNC10L3RgtCw0YDQuNC5INC00L4g0LrQvtC90YbQsCDRgdGC0YDQvtC60LgKCi8vINC/0L7QvNC10YHRgtC40Lwg0LLRgdC1INC60L7QvNC80LXQvdGC0Ysg0LIg0LzQsNGB0YHQuNCyCiRSRTQ9PDw8IEhFUkVET0MKW14iXC8tXSsrIHwgIyDQvdC1INC60LDQstGL0YfQutCwINC4INC90LUg0YHQu9GN0Ygg0Lgg0L3QtSDRgtC40YDQtQokUkUyIHwgIyDRh9GC0L4t0YLQviDQsiDQutCw0LLRi9GH0LrQsNGFCiRSRTEgfCAjINC80L3QvtCz0L7RgdGC0YDQvtGH0L3Ri9C5INC60L7QvNC80LXQvdGCCiRSRTMgfCAjINC+0LTQvdC+0YHRgtGA0L7Rh9C90YvQuQpbLVwvXSAgIyDRgtC40YDQtSDQuNC70Lgg0YHQu9GN0YggKNC+0YLQutGA0YvRgtCw0Y8g0LrQsNCy0YvRh9C60LAg0L/QvtC00YDQsNC30YPQvNC10LLQsNC10YIg0L3QsNC70LjRh9C40LUg0LfQsNC60YDRi9Cy0LDRjtGJ0LXQuSkKCkhFUkVET0M7CgokUkU1PSA8PDwgSEVSRURPQwooPzxxdWVyeT4KICAgICg/OgogICAgICAgIFteIjtdKysgfCAjINC90LUg0LrQsNCy0YvRh9C60LAg0Lgg0L3QtSDRgtC+0YfQutCwINGBINC30LDQv9GP0YLQvtC5CiAgICAgICAgJFJFMiAjINGH0YLQvi3RgtC+INCyINC60LDQstGL0YfQutCw0YUKICAgICkrICAKICAgIDsKKQoKSEVSRURPQzsKJHNxbD1wcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAiLyRSRTQveHMiLAogICAgZnVuY3Rpb24oJGRhdGEpIHVzZSAoJiRyZXMpIHsKICAgICAgICBpZiAoJGRhdGFbImNvbW1lbnQiXSB8fCAkZGF0YVsiZW5kY29tbWVudCJdKSB7CiAgICAgICAgICAgICRyZXNbImNvbW1lbnRzIl1bXT0kZGF0YVsiY29tbWVudCJdPyRkYXRhWyJjb21tZW50Il06JGRhdGFbImVuZGNvbW1lbnQiXTsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuICRkYXRhWzBdOwogICAgfSwKICAgICRzcWwpOwpwcmVnX21hdGNoX2FsbCgiLyRSRTUveHMiLCAkc3FsLCAkdGVtcCk7CiRyZXNbInF1ZXJ5ZXMiXT0kdGVtcFswXTsKcmV0dXJuICRyZXM7Cn07Cgp2YXJfZHVtcChwYXJzZSgkdGV4dCkpOwo/Pg==