SQL 子串非贪婪正则表达式

SQL substring non greedy regex

我有这样的数据

http://www.linz.at/politik_verwaltung/32386.asp

存储在文本列中。我认为非贪婪提取

select substring(turl from '\..*?$') as ext from tdata

会给我 .asp 但它仍然 ?greedely 结果是

 .linz.at/politik_verwaltung/32386.asp

如何只匹配最后一次出现的点 .
使用 PostgreSQL 9.3

试试这个:

\.[\w]*$

这是它的工作原理:

所有word个字符(\w),*之间的任意数字,在dot\.)和[=16之间=] ($),最后一个 . 本身。

注意:更新了答案,现在将捕获以.结尾的字符串。

\.[^.]*$ 匹配 . 后跟任意数量的非点字符后跟字符串结尾:

# select substring('http://www.linz.at/politik_verwaltung/32386.asp' 
  from '\.[^.]*$');
 substring 
-----------
 .asp
(1 row)

至于为什么非贪婪量词在这里不起作用是因为它们仍然会尽快开始匹配,同时仍然试图从那里开始尽可能短的匹配。