在SQL中选择与输入匹配的正则表达式值的行?

时间:2014-01-24 18:37:13

标签: sql regex postgresql

我希望选择具有与给定字符串输入匹配的正则表达式的行,而不是根据字符串值是否等于给定的正则表达式输入来选择行。

就目的而言,我正在尝试从输入网址中识别网站名称。

TABLE
WEBSITE                    REGEX 
The New York Times         ^.+\.nytimes.com.*$

这样做有好办法吗?我正在使用postgres,我希望避免大循环。

谢谢!

1 个答案:

答案 0 :(得分:1)

这似乎工作正常:

CREATE TABLE Sites
(
   SiteName text,
   RegEx text  
);

INSERT INTO Sites VALUES ('NY Times', '^.+\.nytimes.com.*$');

然后你可以这样做:

SELECT * FROM Sites
WHERE 'http://www.nytimes.com/Foo' ~ RegEx;

Fiddle

请记住,如果你有很多行,这可能会开始变慢,因为每次对每一行运行正则表达式时,它都必须进行顺序表扫描。一种更好的方法可能是首先解析URL并以某种方式对其进行标准化,然后在表中查找完全匹配。