SELECT '?i', ?i
Давай вернемся к этому вопросу.Если считать, что знаки вопроса экранировать придётся только в строковых литералах, то можно так:
preg_match_all() или preg_split(), там есть свои плюсы и минусы.PHP:$pattern = '/"(?:\\\\.|[^"])*+"|\'(?:\\\\.|[^\'])*+\'|\?[a-z]/';
Правда для каждой СУБД свой паттерн будет, т.к. в MySQL символы экранируются с помощью бэкслэша, а в каком-нибудь MS SQL — удваиванием символа ограничителя.
Как я понял, прочитав тему, ты просто не сможешь составить такое рег. выраж.если рег будет попросту пропускать все закавыченные участки и таким образом у нас запрос будет разбит только по плейсхолдерам
$pattern = "~(?:\"(?P<dq>[^\"]+)\"|(?:'(?P<sq>[^']+)'|(?P<nq>[^\"']+)))~";
$string = "текст, еще \"в ковычках\"; \"с 'ковычками'\", 'заковычиный', 'заковычиный \"в ковычках\"' hello;world";
preg_match_all($pattern, $string, $m);
print_r($m);