特定重复字符内的子串选择

时间:2012-12-28 03:48:59

标签: sql regex postgresql

我一直在四处寻找答案,但我几乎无法将手指放在上面。

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

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

任何想法都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

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

  

string上拆分delimiter并返回给定字段(从1开始计算)。

例如:

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

不要忘记http://中双倍斜杠引起的空白部分。

答案 1 :(得分: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

More in the manual.

答案 2 :(得分:0)

http:\/\/([^\/]+\/){n}([^\/]+).*$
你的例子中

n = 3