2009-05-22 5 views
1

J'ai cette regex dans une requête dans postgres et je ne peux pas comprendre pourquoi il ne correspond à rien après le texte spécifié dans la regex;Regex dans Postgres - ne pas faire ce que je suis en train de faire (newbie question)

L'idée est de supprimer la dernière partie, y compris les caractères séparateurs.

J'ai des dossiers comme ceux-ci correspondent:

Villa hermosa, Pilar, PCIA. BS. AS.  
Esmeralda - Pilar - BUENOS AIRES.  
San Martin, BUENOS AIRES.- 

et j'utilise cette expression:

regexp_replace(location, 
'([,\s\.-]*PCIA. BS. AS[,\s\.-]*| 
    [,\s\.-]*BUENOS. AIRES[,\s\.-]*$| 
    [,\s\.-]*BS. AS[,\s\.-]*$| 
    [,\s\.-]*P.B.A[,\s\.-]*$)', '') 

cela fonctionne bien du texte EIPC, Buenos Aires, mais il ne prend pas la ',' '.' le '-' ni les espaces après le mot. J'ai besoin d'aide pour trouver où est le problème.

Répondre

4

Doublez vos antislashs. Postgres pense que vous faites des évasions sur la chaîne elle-même.

Dans les nouvelles versions de PostgreSQL où standard_conforming_strings est activée par défaut, il n'est plus nécessaire de doubler antislashs à moins que vous utilisez un E'string' ou explicitement défini standard_conforming_strings-off.

+0

Merci beaucoup! (Je suis sûr que je l'ai essayé une fois, mais à coup sûr une autre erreur a empêché cela de fonctionner et je pensais que ce n'était pas la cause) – Sam

Questions connexes