1

这是此处帖子的后续问题Regex 用于匹配 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 或类似性质的东西。

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

4

1 回答 1

9

看起来你不能用 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然后解决这个问题。

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

于 2013-01-15T04:09:50.427 回答