2012-07-30 18 views
26

URL içeren sütunlara sahip bir dizi satır içeren bir tablom var. URL formdadır:Düzenli ifade Bulgres'te bulun ve değiştirin

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

ben sonra her şeyi korurken http://example2.com/dotFile.com ile bu sütundaki tüm eşleri değiştirmek istiyorum: 9999. Regexp_matches ve regexp_replace ile ilgili bazı belgeler buldum, ancak kafamın etrafına dolamıyorum.

cevap

27

URL'yi biliyorsanız, regex kullanmanız gerekmez. replace() işlevi sizin için çalışması gerekir:

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

deneyebilirsin:

replace(yourcolumn, 'one.example1.com:9999','example2.com') 
+1

+1 pragmatik yaklaşım. – Tomalak

+5

Teşekkürler, bu hile yaptı. güncelleştirme tablosu SET alanı = değiştirin (alan, 'one.example1.com:9999','example2.com') – ringocub

40

, sabit bir dize yerine basit replace() işlevini kullanın.

böyle regexp_replace() kullanabilirsiniz, dinamik bir dize değiştirmek için:

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

'replace()' burada zaten yaptığınız gibi daha basit bir iş yapıyor. Bununla birlikte, "tüm eşleşmeleri" regexp_replace() ile değiştirmek için "globally" için "g" parametresini 4 olarak eklemelisiniz. –

+0

@Erwin İpucu için teşekkürler. Bunu dahil ettim. – Tomalak

+0

Güncelleme hızını filtrelemek ve iyileştirmek için "UPDATE ... WHERE" e-posta "= regexp_matches (" email ", E". [Co.tz] ') 'gibi bir yerde kullanabileceğim birini arıyordum. Ama bu da tamam, çünkü bunu yalnızca bir kez yapıyorum, gelişimde. Teşekkür ederim, çünkü gerçekten bir “regexp” çözümünü istedim. :) – ArchNoob