SQL函数用于匹配URL的最后两部分

时间:2013-01-15 03:45:21

标签: postgresql pattern-matching postgresql-8.3

这是对帖子Regex for matching last two parts of a URL

的跟进问题

我想知道是否可以使用内置的sql函数来完成相同类型的模式匹配而不使用正则表达式。特别是我在想是否有办法将字符串反转为www.stackoverflow.com到com.stackoverflow.www然后应用连接到split('com.stackoverflow.www,'。',1)|| split('com.stackoverflow.www,'。',2)我会完成但我不确定这是否可行。

以下是一般性问题描述:

我试图弄清楚最好的sql函数只是匹配由a分隔的最后两个字符串。在网址中。

例如www.stackoverflow.com我只想匹配stackoverflow.com

我遇到的问题是某些字符串可能有很多句点,例如

a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com

也应仅返回yimg.com

我正在使用的URL集合没有任何路径信息,所以可以假设字符串的最后一部分总是.org或.com或那种性质的东西。

  

当针对www.stackoverflow.com运行时,sql函数将返回stackoverflow.com,并且在上述条件下针对a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com运行时将返回yimg.com ?我不想在解决方案中使用正则表达式只是sql字符串操作函数。

1 个答案:

答案 0 :(得分:7)

使用8.3函数集http://www.postgresql.org/docs/8.3/static/functions-string.html

看起来不像这样

没有反转 - 这是9.1。你可以这样做:

select reverse(split_part(reverse(data), '.', 2)) || '.'
    || reverse(split_part(reverse(data), '.', 1))
from example;

请参阅http://sqlfiddle.com/#!1/25e43/2/0

您可以声明自己的反向:http://a-kretschmer.de/diverses.shtml,然后解决此问题。

但正则表达式更容易......

相关问题