postgres regex_replace 第三个和最后一个正斜杠之间的所有内容
Posted
技术标签:
【中文标题】postgres regex_replace 第三个和最后一个正斜杠之间的所有内容【英文标题】:postgres regex_replace everything between the third and last forward slash 【发布时间】:2020-12-11 19:21:06 【问题描述】:我在 Postgres 表中有一些 URL,目前看起来像这样:
http://blue.website.com/categoryA/sectionA/title/6534566234
http://yellow.website.com/categoryA/sectionB/title/36476586
http://green.website.com/categoryB/sectionB/title/34646634
我正在尝试创建一个可用于将 URL 转换为如下所示的正则表达式:
http://blue.website.com/6534566234
http://yellow.website.com/36476586
http://green.website.com/34646634
我能够弄清楚如何使用 regex_replace
将直到最后一个 /
的所有内容都替换为空:
select regexp_replace('http://blue.website.com/categoryA/sectionA/title/6534566234', '^.*/', '')
regexp_replace|
--------------|
6534566234 |
但是,我不确定如何扩展它以替换第三个 /
和最后一个 /
之间的所有内容。
【问题讨论】:
【参考方案1】:将每个术语分别替换为空白(即“删除”),使用环视来定位正确的部分:
select regexp_replace('http://blue.website.com/categoryA/sectionA/title/6534566234', '(?<!/)/[^/]+(?=/)', '', 'g')
见live demo。
正则表达式(?<!/)/[^/]+(?=/)
的工作原理如下:
/[^/]+
匹配斜线后跟非斜线
(?<!/)
前面的字符不是斜杠。这可以防止匹配您想要保留的//
之后的部分
(?=/)
要求以下字符为斜线。这会阻止匹配您要保留的最终术语
最后一个参数 'g'
是 global 标志 - 表示替换 all 匹配项(不仅仅是第一个,如果未指定此参数,则会出现这种情况)
【讨论】:
以上是关于postgres regex_replace 第三个和最后一个正斜杠之间的所有内容的主要内容,如果未能解决你的问题,请参考以下文章
我只想将 regex_replace 用于第一个字符(电话号码)