1

我一直在环顾四周,我几乎已经找到了答案,但我就是不能把手指放在上面。

我想在 URL 中的第 n 个正斜杠之后和下一个正斜杠之前选择值。

因此,例如:在以下 URL... https://stackoverflow.com/foo/bar/thisValue/more/text/我想返回 thisValue(在第五个正斜杠之后)。

任何想法,将不胜感激。

4

3 回答 3

2

您可以跳过正则表达式并使用split_part

拆分stringdelimiter返回给定的字段(从一开始计数)。

例如:

=> select split_part('http://stackoverflow.com/foo/bar/thisValue/more/text/', '/', 6);
 split_part 
------------
 thisValue

不要忘记 . 中的双斜线造成的空白部分http://

于 2012-12-28T04:28:16.390 回答
1

当前接受的解决方案对我不起作用。这样做:

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

更多在手册中。

于 2012-12-28T08:46:11.543 回答
0
http:\/\/([^\/]+\/){n}([^\/]+).*$

在你的例子中 n=3

于 2012-12-28T03:59:16.760 回答