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