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)
至于为什么非贪婪量词在这里不起作用是因为它们仍然会尽快开始匹配,同时仍然试图从那里开始尽可能短的匹配。
我有这样的数据
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)
至于为什么非贪婪量词在这里不起作用是因为它们仍然会尽快开始匹配,同时仍然试图从那里开始尽可能短的匹配。