Ya veo, me parece que debemos dividir el gran problema en pequeños problemas.
Lo primero sería extraer todos los datos de dicha consulta, estructurarlos y partir de ahí, validarlos.
Sólo necesitas expresiones regulares para el primer paso:
Código PHP:
Ver original$query = ' WHERE (t.var1=1 OR t.var1=3) AND (t.tit1=3 OR t.tit1=5) ';
// validamos WHERE (trivial)
// extraemos condiciones
if (preg_match_all('/\(\s*([^()]+?)\s*\)\s*(?=AND|&&|$)/i', $query, $matches)) { // iteramos condiciones AND
foreach ($matches[1] as $match) {
// sub-condicionales
// extraemos sub-condiciones y operadores
if (preg_match_all('/(\w+)\.(\w+)\s*(!?==?|[<>]=)\s*([\'"][^\'"]*[\'"]|-?[\d.]+)\s*(?=OR|\|\||$)/', $match, $sub_matches)) { 'object' => $sub_matches[1][$key],
'field' => $sub_matches[2][$key],
'operator' => $sub_matches[3][$key],
'value' => $sub_matches[4][$key],
);
}
}
$where []= $sub;
}
}
}
// condiciones
Ahora, el proceso de validación es bastante diferente, debes emplear tu ingenio para analizar dicha estructura y resolver esa parte del problema.
Como puedes observar usar sólo expresiones regulares sería insuficiente por la cantidad de opciones que se pueden dar, y dado el caso, no solo sería imposible sino absurdo dejar la tarea únicamente a las expresiones.