$re = '/\G                    #anclado a \A o fin de última coincidencia
(                     #Grupo 1: Caracteres previos
  [^\h\\\\\'\v]*+        # Todo menos caracteres especiales
  (?:                 # Repetir infinitas veces
    (?:               #  Alternativas:
      (?!^)\h         #   a. espacio simple que no
      (?!\h|$)        #      está al ppio ni al final
    | \v              #   b. línea nueva
    | \\\\.             #   c. cualquier escape
    | \'[^\'\\\\]*+       #   d. comillas
       (?:(?:\'\'|\\\\.)[^\'\\\\]*)*        
      \'               #
    )                 #
    [^\h\\\\\'\v]*+      #  Seguido de más texto no especial
  )*                  #
)                     #(fin G1)
(?:                   #Espacios:
  ^\h+                # a. al ppio de la línea
| \h+(\h|$)           # b. en el medio o al final
)                     #/mx';
$str = '   select   * ,      fooo      , 
 a,    
b,
c
        from
table
where a         = \'a     b\'
   or campo   =   \'borra los espacios \\\'no?\'
and c             = 1;';
$subst = "$1$2";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php