如何在pl / sql中使用正则表达式提取域名的TLD?

时间:2014-08-03 03:40:52

标签: sql regex oracle

我的专栏只有" .edu .gov .org .com"存储在其中的域。同一个表中还有另一列存储CompanyID。我想知道根据域名对公司进行分类的最佳程序。即:教育.edu,政府为.gov等。

我的表格如下:

CompaniID  Website
--------------------------------------------
1          www.comp1.gov/index.php
2          www.great-nice.comp.edu/#contact

我尝试了以下方法来处理TLD,但在某些情况下它失败了。一旦我计算了TLD比较,我就可以处理其余的查询。

段:

CASE
   WHEN
     REGEXP_Instr(Website, '.com') > 0
     AND
     NOT REGEXP_LIKE (SUBSTR (Website, REGEXP_Instr(Website, '.com') + 4,1), '^[a-z]|^[0-9]', 'i')
   THEN  'For Profit'   
   ELSE 'Others'
END 

2 个答案:

答案 0 :(得分:2)

您可以使用\.[a-z]+(/|$)模式在' /'之前提取字符。字符。

WITH x (y)
     AS (SELECT 'www.comp1.gov/index.php' FROM DUAL UNION ALL
         SELECT 'www.great-nice.comp.edu/#contact' FROM DUAL UNION ALL
         SELECT 'www.comp1.edu' FROM DUAL
        )
SELECT y,
       RTRIM (REGEXP_SUBSTR (y, '\.[a-z]+(/|$)'), '/') tld,
       REGEXP_SUBSTR (y, '\.([a-z]+)(/|$)', 1, 1, NULL, 1) tld2 --works only in 11gR2 and higher versions 
  FROM x;

|    y                              | tld | tld2 |
|-----------------------------------|-----|------|
|  www.comp1.gov/index.php          |.gov | gov  |
|  www.great-nice.comp.edu/#contact |.edu | edu  |
|  www.comp1.edu                    |.edu | edu  |

在CASE语句中使用此选项可根据您的需要进行分类。

答案 1 :(得分:0)

这会匹配www.comed.com之类的内容。你可能想要

.com(?:[/]|$)