postgres regex_replace 第三个和最后一个正斜杠之间的所有内容
postgres regex_replace everything between the third and last forward slash
我在 Postgres table 中有一些 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 |
但是,我不确定如何扩展它以替换第 3 个 /
和最后一个 /
之间的所有内容。
分别用空白替换(即“删除”)每个术语,使用环视以定位正确的部分:
select regexp_replace('http://blue.website.com/categoryA/sectionA/title/6534566234', '(?<!/)/[^/]+(?=/)', '', 'g')
正则表达式 (?<!/)/[^/]+(?=/)
的工作方式如下:
/[^/]+
匹配斜杠后跟 non-slashes
(?<!/)
前面的字符不是斜杠。这可以防止匹配 //
之后的部分,而您希望保留
(?=/)
要求后面的字符是斜杠。这会阻止匹配您要保留的最终术语
最后一个参数 'g'
是 global 标志 - 意味着替换 all 匹配(不仅仅是第一个,就像如果未指定此参数,则会出现这种情况)
我在 Postgres table 中有一些 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 |
但是,我不确定如何扩展它以替换第 3 个 /
和最后一个 /
之间的所有内容。
分别用空白替换(即“删除”)每个术语,使用环视以定位正确的部分:
select regexp_replace('http://blue.website.com/categoryA/sectionA/title/6534566234', '(?<!/)/[^/]+(?=/)', '', 'g')
正则表达式 (?<!/)/[^/]+(?=/)
的工作方式如下:
/[^/]+
匹配斜杠后跟 non-slashes(?<!/)
前面的字符不是斜杠。这可以防止匹配//
之后的部分,而您希望保留(?=/)
要求后面的字符是斜杠。这会阻止匹配您要保留的最终术语
最后一个参数 'g'
是 global 标志 - 意味着替换 all 匹配(不仅仅是第一个,就像如果未指定此参数,则会出现这种情况)