2015-02-20 6 views
4

У меня есть данные, какSQL подстрока не жадный регулярное выражение

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

+0

Не могли бы вы представить пример ожидаемого вывода? –

+0

'.asp' - это то, что вы ожидаете правильно –

+0

Извините за неточность, да, .asp будет тем, что я ожидаю – JohnDoe

ответ

6

\.[^.]*$ матчи . следуют любое количество не точечно символов с последующим истекшим строки:

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

А почему не-жадные кванторы не работают здесь в том, что они до сих пор начинают соответствие как можно скорее в то же время стараюсь как можно короче как можно дальше оттуда.

2

Попробуйте это:

\.[\w]*$ 

Вот как это работает:

все word символы (\w), любые номера из них с * между dot (\.) и end of the string ($), с последним ..

Примечание: обновлен ответ, теперь он будет захватывать концы строк ..

Смежные вопросы