有没有办法将列拆分为标记,并加入它们(就像在其他编程语言中一样,如Python,Java,Ruby)
我有一个包含“http://www.Yahoo.com”等网址的列,我想从中提取“Yahoo.com”(主域名,而不是子域名)。网址可以是以下形式:
我打算使用正则表达式在http://之后和下一个斜杠之前提取所有内容。然后将句点分割为句点(。),然后加入最后2个标记。
使用正则表达式,我可以从http://www.yahoo.com中提取www.yahoo.com。通过分组/连接,我可以从www.yahoo.com获得yahoo.com。问题是我不知道如何与Postgres进行拆分/连接。
有人知道吗?还是更好的选择?
答案 0 :(得分:3)
这不是你要求的方法,但应该得到你想要的东西:
vinod=# select * from table;
url
----------------------------------
http://www.domain.com
http://domain.com
http://domain.com/page/page1
http://www.domain.com/page/page2
http://www.domain.com/
(5 rows)
vinod=# select substring(substring(url from 'http[s]*://([^/]+)') from '\w+\.\w+$') from table;
substring
------------
domain.com
domain.com
domain.com
domain.com
domain.com
(5 rows)
内部substring
命令拉出完整域,外部substring
命令拉出最后两个片段。 Postgresql拆分和连接命令没有普通脚本语言那么强大,所以我倾向于在把数据从数据库中拉出来之后做这种事情,如果可以的话。
答案 1 :(得分:0)
您可以将它们与\w+.[^.]+$
http://www.domain.com -> domain.com
http://domain.com -> domain.com
http://domain.com/page/page1 -> domain.com/page/page1
http://www.domain.com/ -> domain.com/
http://www.domain.com/page/page2 -> domain.com/page/page2
答案 2 :(得分:0)
将事物拆分成令牌可以通过以下几种方式完成:
regexp_split_to_table
/ regexp_split_to_array
string_to_array
(对于简单的固定分隔符拆分)substring
提取或substring(... from 'pattern')
to_tsvector
和to_tsquery
在这种情况下,您可以使用regexp_split_....
使用正则表达式进行URL拆分,这可能适用于许多用途 - 但可能不是这个。考虑:
ringerc.id.au
( 是“主要”域名)www.ecu.edu.au
(“主要”域名为ecu.edu.au
)www.transperth.wa.gov.au
(“主要”域名为transperth.wa.gov.au
)tartarus.uwa.edu.au
(“主要”域名为uwa.edu.au
)祝你好运使用正则表达式处理所有国家注册局和子注册表变体。使用正确的URL解析器来提取域,然后使用适当的域感知库来确定“主”域的用途。我建议使用plperl和the URL::Split
或URI
模块开始。或者你想要的任何支持的过程语言(Python,TCL,等等)的URL解析器。然后为该语言找到一个合适的库,可以根据您想要的标准有意义地识别域和子域,并使用它,而不仅仅依赖于正则表达式。
加入时你同样有很多选择:
array_to_string
string_agg
||
连接运算符对于URL工作,我建议再次使用具有适当本机URL库的PL。