使用PostgreSQL,如何在出现5次正斜杠后将所有正斜杠替换为连字符,如下所示:
https://this/is/a/very/long/url
对此:
https://this/is/a/very-long-url
使用PostgreSQL,如何在出现5次正斜杠后将所有正斜杠替换为连字符,如下所示:
https://this/is/a/very/long/url
对此:
https://this/is/a/very-long-url
一个带有智能图案的regexp_replace()
可以做到这一点:
SELECT regexp_replace(url, '(?<=(.*?/){5})(.*?)/', '\1-', 'g');
url
可以是任何字符串,不一定是URL.第一个5之后的每个斜杠(/
)都替换为连字符(-
).
正则表达式解释说:
(?<=re)
...positive lookbehind(仅与此表达式匹配after)
.*?
....
匹配任何字符,*?
是非贪婪量词"0-n次,尽可能少"
{5}
..前一个原子的量词
\1
……在替补中是back reference分才能捕捉到比赛.
'g'
...最后一个参数‘g’代表"全局",即替换所有匹配项,而不仅仅是第一个匹配项.