Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 REGEXP парсинг EMAIL и URL  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
Ребят, помогите с парсингом, необходимо из произвольной строки получать валидные e-mail и web-url'ы.

В моем скрипте сейчас пролезает лишняя строка "Alexander.Kochnev", считается как url

declare
  p_value varchar2(200) := 'Alexander.Kochnev@yandex.com, Alexander.Kochnev http://privet.ru/ mail.ru gov.cont.ru';

  p_mail varchar2(100) := '[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}';
  p_url  varchar2(100) := '((https?|ftp)://)?(www\.)?([a-z0-9_-]+\.)+[a-z]{2,6}(/[a-z0-9_-]+)*';
begin
  for cur in (select regexp_substr(n'' || p_value, '(' || p_mail || '|' || p_url || ')+', 1, level, 'i') web_value
                from dual
               where regexp_substr(n'' || p_value, '(' || p_mail || '|' || p_url || ')+', 1, level, 'i') is not null
              connect by regexp_substr(n'' || p_value, '(' || p_mail || '|' || p_url || ')+', 1, level, 'i') is not null)
  loop
    dbms_output.put_line(cur.web_value);
  end loop;
end;
15 июл 16, 11:19    [19413202]     Ответить | Цитировать Сообщить модератору
 Re: REGEXP парсинг EMAIL и URL  [new]
123йй
Member

Откуда:
Сообщений: 1638
Adtain,
а с чего ты решил что
автор
mail.ru gov.cont.ru

считается как url ?
15 июл 16, 11:35    [19413342]     Ответить | Цитировать Сообщить модератору
 Re: REGEXP парсинг EMAIL и URL  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
123йй,

Я их пропускаю, т.к. работаю с данными операторов, к сожалению, они могут такой адрес написать.
Прост хочу отсечь явные ошибки, которые при вводе в браузер не сработают
15 июл 16, 11:37    [19413361]     Ответить | Цитировать Сообщить модератору
 Re: REGEXP парсинг EMAIL и URL  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
Мне нужно заставить работать этот кусок [a-z]{2,6}, чтоб он отсекал, а не приглаживал из-за использования substr'а
15 июл 16, 12:14    [19413735]     Ответить | Цитировать Сообщить модератору
 Re: REGEXP парсинг EMAIL и URL  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
В Oracle не работают якоря \b ?
'((https?|ftp):\/\/)?(www\.)?([a-z0-9-]+\.)+\b[a-z]{2,4}\b(\/[a-z0-9-]*)*'
15 июл 16, 15:51    [19415115]     Ответить | Цитировать Сообщить модератору
 Re: REGEXP парсинг EMAIL и URL  [new]
Elic
Member

Откуда:
Сообщений: 29990
Adtain
В Oracle не работают якоря \b ?
RTFM Perl-influenced Extensions in Oracle Regular Expressions (FAQ)
15 июл 16, 15:54    [19415134]     Ответить | Цитировать Сообщить модератору
 Re: REGEXP парсинг EMAIL и URL  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
Elic,

Т.е. границы слова нету, жаль.
15 июл 16, 15:57    [19415152]     Ответить | Цитировать Сообщить модератору
 Re: REGEXP парсинг EMAIL и URL  [new]
Adtain
Member

Откуда: Moscow
Сообщений: 290
По извратившись, сделал так:

declare
  p_value varchar2(200) := 'jdoe@company.co.uk Alexander.Kochnev@yandex.com Alexander.Kochnev http://privet.ru.ru/test/uiop, mail.ru,www.gov.cont.ru|facebook.com/atito мойсайт.рф';

  p_mail varchar2(100) := '[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}';
  p_url  varchar2(200) := '((https?|ftp)://)?(www\.)?([а-яa-z0-9-]+\.)+[а-яa-z]{2,6}((/[а-яa-z0-9-]*)+|[[:blank:]]|$|[[:punct:]])';

begin
  for cur in (select regexp_replace(regexp_substr(n'' || p_value, p_mail || '|' || p_url, 1, level, 'i'), '([[:punct:]]|[[:space:]])+$') web_value
                from dual
               where regexp_substr(n'' || p_value, p_mail || '|' || p_url, 1, level, 'i') is not null
              connect by regexp_substr(n'' || p_value, p_mail || '|' || p_url, 1, level, 'i') is not null)
  loop
    dbms_output.put_line(cur.web_value);
  end loop;
end;
15 июл 16, 17:09    [19415585]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить