我一直在环顾四周,我几乎已经找到了答案,但我就是不能把手指放在上面。
我想在 URL 中的第 n 个正斜杠之后和下一个正斜杠之前选择值。
因此,例如:在以下 URL... https://stackoverflow.com/foo/bar/thisValue/more/text/我想返回 thisValue(在第五个正斜杠之后)。
任何想法,将不胜感激。
我一直在环顾四周,我几乎已经找到了答案,但我就是不能把手指放在上面。
我想在 URL 中的第 n 个正斜杠之后和下一个正斜杠之前选择值。
因此,例如:在以下 URL... https://stackoverflow.com/foo/bar/thisValue/more/text/我想返回 thisValue(在第五个正斜杠之后)。
任何想法,将不胜感激。
您可以跳过正则表达式并使用split_part
:
拆分
string
并delimiter
返回给定的字段(从一开始计数)。
例如:
=> select split_part('http://stackoverflow.com/foo/bar/thisValue/more/text/', '/', 6);
split_part
------------
thisValue
不要忘记 . 中的双斜线造成的空白部分http://
。
当前接受的解决方案对我不起作用。这样做:
SELECT substring('http://stackoverflow.com/foo/bar/thisValue/more/text/'
,'^http://(?:[^/]*/){3}([^/]+)')
解释:
^ .. anchor left
(?: .. non-capturing parenthesis
[^/]* .. 0-n character being not "/"
{3} .. last element 3 times
([^/]+) .. 1-n characters not "/", this time in capturing parenthesis
http:\/\/([^\/]+\/){n}([^\/]+).*$
在你的例子中 n=3