postgresql正则表达式和子串

时间:2011-02-14 13:42:09

标签: regex postgresql substring

我有一个正则表达式http\:\/\/domainname\.com\/\S{4},它应该抓住这样的网址:http://domainname.com/key4更长的文字。

我想只获取密钥并将其与postgres数据库中的表字段匹配。

在尝试了一些东西后,我来到这个查询(用于抓取键):

SELECT substring(infos FROM '[http\:\/\/domainname\.com\/\S{4}]{7}' ) AS key FROM actions

因此我得到每一行的/domainname.com ......好吧,没有钥匙,你可以看到。

我做错了什么?

任何人都可以告诉我{7}代表什么?

2 个答案:

答案 0 :(得分:1)

{7}代表之前模式的7倍。因此,在这种情况下,[]之间的不同字符。即[abc]{3}匹配aaa cba或任何其他组合。

我很确定这不是你想要的。您可能正在寻找类似的东西:

SELECT substring('http://domainname.com/key4' from 'http://domainname\\.com/\\S{4}')
FROM actions

答案 1 :(得分:0)

这可能就是你在这个具体案例中寻找的东西

select substring(substring('long text [http://domainname.com/key4] more text',E'http\:\/\/domainname\.com\/\\S{4}'),E'\\S{4}$');

如果长度为四个字符,将提取关键部分。如果您可能也在寻找类似key456的内容,那么可以使用更通用的匹配,例如

select substring(substring('long text [http://domainname.com/key467] more text',E'http\:\/\/domainname\.com\/key\\d+'),E'key\\d+$');

可能更合适