我有一個表,其中包含大量包含URL的列的行。該URL的形式爲:正則表達式在Postgres中查找和替換
http://one.example1.com:9999/dotFile.com
我想與http://example2.com/dotFile.com
,以取代在該列中的所有比賽,同時保持後一切:9999。我找到了關於regexp_matches和regexp_replace的一些文檔,但是我無法完全理解它。
我有一個表,其中包含大量包含URL的列的行。該URL的形式爲:正則表達式在Postgres中查找和替換
http://one.example1.com:9999/dotFile.com
我想與http://example2.com/dotFile.com
,以取代在該列中的所有比賽,同時保持後一切:9999。我找到了關於regexp_matches和regexp_replace的一些文檔,但是我無法完全理解它。
如果你知道的網址,你不必使用正則表達式。替換()函數應該爲你工作:
replace(string text, from text, to text)
Replace all occurrences in string of substring from with substring to
example: replace('abcdefabcdef', 'cd', 'XX') abXXefabXXef
你可以嘗試:
replace(yourcolumn, 'one.example1.com:9999','example2.com')
要更換一個固定的字符串,使用簡單replace()
功能。對於務實的態度
UPDATE
YourTable
SET
TheColumn = regexp_replace(
TheColumn, 'http://[^:\s]+:9999(\S+)', 'http://example2.com\1', 'g'
)
'replace()'在這裏做了一個更簡單的工作,因爲您已經評論過自己了。但是,要用'regexp_replace()'替換「all matches」,則必須爲「全局」添加第4個參數''g'' .. .. – 2012-07-30 16:18:56
@Erwin感謝您的提示。我已經包括了這一點。 – Tomalak 2012-07-30 16:25:36
我正在尋找一個我可以在'UPDATE ... WHERE'email'= regexp_matches(「email」,E',[co.tz]')'where'子句中使用的篩選和提高更新速度的工具。但是這也沒問題,因爲我只在開發過程中這樣做過一次。謝謝,因爲我真的想要一個'regexp'解決方案。 :) – ArchNoob 2017-03-18 13:37:06
+1:
要更換一個動態字符串,你可以使用
regexp_replace()
這樣。 – Tomalak 2012-07-30 14:05:55謝謝,這個伎倆。 更新表 SET字段= 替換(field,'one.example1.com:9999','example2.com') – ringocub 2012-07-30 14:35:55