web-dev-qa-db-fra.com

Recherche et remplacement d'expressions régulières dans Postgres

J'ai un tableau qui contient un certain nombre de lignes avec des colonnes contenant une URL. L'URL est au format:

http://one.example1.com:9999/dotFile.com

Je voudrais remplacer toutes les correspondances de cette colonne par http://example2.com/dotFile.com tout en conservant tout après: 9999. J'ai trouvé de la documentation sur regexp_matches et regexp_replace, mais je ne peux pas tout à fait comprendre.

30
ringocub

si vous connaissez l'url, vous n'avez pas besoin d'utiliser l'expression régulière. La fonction replace () devrait fonctionner pour vous:

replace(string text, from text, to text)        
Replace all occurrences in string of substring from with substring to   
example: replace('abcdefabcdef', 'cd', 'XX')    abXXefabXXef

tu pourrais essayer:

replace(yourcolumn, 'one.example1.com:9999','example2.com')
31
Kent

Pour remplacer une chaîne fixe, utilisez la simple fonction replace().

Pour remplacer une chaîne dynamique, vous pouvez utiliser regexp_replace() comme ceci:

UPDATE
  YourTable
SET
  TheColumn = regexp_replace(
    TheColumn, 'http://[^:\s]+:9999(\S+)', 'http://example2.com\1', 'g'
  )
58
Tomalak