2015-04-24 2 views
0
select regexp_replace('https://www.facebook.com/cricket/hello', '.*\..*?\/', '') 

Приведенный выше код дает мневыпуск регулярного выражения для URL рисунка на POSTGRES

привет

вместо

крикет/привет

Я проверил веб-сайт проверки Regexp, и шаблон правильный. Я не уверен, где я ошибаюсь.

СУБД: «PostgreSQL 8.2.15 (Greenplum Database 4.2.8.3 сборки 1) на x86_64-неизвестно-Linux-гну, составитель GCC GCC (GCC) 4.4.2 скомпилированные на 2 ноября 2014 01: 33:14"

+0

Что вы пытаетесь сделать, а не получить крикет/привет? Это школа или учебное задание? –

ответ

0

I не знаю, как это сделать, но это сработало

.*?\.[a-z]+\/ 

Принимая запрос Эндрю Вулфа по самым странным типам URL-адресов.

select testval, regexp_replace (testval, '.*?\.[a-z]+\/', '') 
from (
    select 'https://www.facebook.com/cricket/hello' as testval 
    union all 
    select 'http://a.b.co.uk/cric.ke.t/hello' as testval 
    union all 
    select 'ftp://a.b.com.d.e.f/relroot/cricket/hello' as testval union all 
    select 'http://www.google.co.uk/cricket/hello' as testval 
    union all 
    select 'http://a.b.co.uk/cricket/hello/this/is/a/little/longer?and&it=has&args' as testval 
) vals 

enter image description here

0

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

select regexp_replace('https://www.facebook.com/cricket/hello', '.*\.[a-z]+\/', '') 

Также работа с нДВУ:

select regexp_replace('https://www.google.co.uk/cricket/hello', '.*\.[a-z]+\/', '') 
+1

@Ashish - Ответ Педро отлично подходит для вашего примера - вы просто пытаетесь сделать эту работу для этого примера? В противном случае я бы рекомендовал вам тщательно подумать о требованиях и обновить свой вопрос (или принять этот ответ и опубликовать новый вопрос). Кстати, похоже, что проблема с вашим кодом заключается в том, что 'regexp_replace' соответствует жадным (до последнего'/'). –

+0

У меня есть другие URL-адреса, а также ** www.google.co.uk/cricket/hello **, и ответ не будет работать в этом примере. @steveklein, вы правы в вопросе о жадности. Хотя я использовал не жадную версию, 'regexp_replace' по-прежнему становится жадным. Как я могу это решить. – Ashish

+0

Я обновил свой ответ, попробую. Он работает с любыми gtld или cctld. –

0

Я предполагаю, что вам нужна часть пути URL-адреса.

Я не мой пг вверх, но я бы очень четко с каждой частью URL -

'[^:]+:\/\/[A-Za-z][-a-zA-Z0-9]*(\.[A-Za-z][-a-zA-Z0-9]*)*/' 

Тест:

select testval, regexp_replace (testval, '[^:]+:\/\/[A-Za-z][-a-zA-Z0-9]*(\.[A-Za-z][-a-zA-Z0-9]*)*/', '') 
from (
    select 'https://www.facebook.com/cricket/hello' as testval 
    union all 
    select 'http://a.b.co.uk/cric.ke.t/hello' as testval 
    union all 
    select 'ftp://a.b.com.d.e.f/relroot/cricket/hello' as testval union all 
    select 'http://www.google.co.uk/cricket/hello' as testval 
    union all 
    select 'http://a.b.co.uk/cricket/hello/this/is/a/little/longer?and&it=has&args' as testval 
) vals 

См http://sqlfiddle.com/#!15/9eecb/857/0

+0

Это выглядит отлично, но все еще не работает на GreenPlum. Первые четыре дали ** привет ** в качестве результатов, а последний дал ** дольше? И & it = имеет & args ** – Ashish