Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения в PL/SQL 
V
    Опции темы
corpsehunter
Дата 28.12.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Как проверить строчку с помощью регулярный выражений в pl/sql? 
Вооще, надо проверить мыло на корректность, но, главное, расскажите как с ними (регулярными выражениями) работать, а само выражение я и сам запросто составлю...

p.s. Ничего не нашел - нашел только в оглавлении одной книжки, а саму книжку ни где найти не могу....

--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
skyboy
Дата 28.12.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(corpsehunter @  28.12.2007,  20:48 Найти цитируемый пост)
расскажите как с ними (регулярными выражениями) работать

саму концепцию регулярных выражений и общепринятый синтаксис можно посмотреть в Википедии
если ты о том, какие функции можно в pl/sql использовать для поиска по регулярным выражениям, так есть regexp_like(и несколько других)

Добавлено через 1 минуту и 31 секунду
Цитата(corpsehunter @  28.12.2007,  20:48 Найти цитируемый пост)
Ничего не нашел 

запрос: "основы регулярных выражений"
результат: 647 тысяч страниц.
PM MAIL   Вверх
corpsehunter
Дата 29.12.2007, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Цитата(skyboy @ 28.12.2007,  22:19)

запрос: "основы регулярных выражений"
результат: 647 тысяч страниц.

Вот эта вот фраза:
Цитата(corpsehunter @ 28.12.2007,  21:48)
а само выражение я и сам запросто составлю...

обозначала, что с регулярными выражениями я встречался неоднократно, а искал я именно как ими пользвоаться в PL/SQL. Так что не надо язвить  :PPP

И забыл добавить самое главное - у меня Oracle 9i, правда я и сам уже нашел, что они появились только начиная с 10g...
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
skyboy
Дата 29.12.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(corpsehunter @  28.12.2007,  23:49 Найти цитируемый пост)
И забыл добавить самое главное - у меня Oracle 9i

да, это важно.
Цитата(corpsehunter @  28.12.2007,  23:49 Найти цитируемый пост)
правда я и сам уже нашел, что они появились только начиная с 10g... 

с Oracle практически незнаком, потому имею смелость сделать предположение: если очень надо и в oracle UDF может быть не только на PL/SQL, то можно либо засунуть работу с регулярным выражениями в DLL, либо как в MSSQL сделать работу с регулярными выражениями через ActiveX. Конечно, если Oracle такое поддерживает и задержки на вызов внешних по отношению к СУБД потоков не перевешивают получаемого функционала.
PM MAIL   Вверх
skyboy
Дата 29.12.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(corpsehunter @  28.12.2007,  20:48 Найти цитируемый пост)
Вооще, надо проверить мыло на корректность

я сразу как-то не заметил постановку задачи. а почему не проверять валидность адреса на стороне клиента БД(РНР там или ASP.NET - на чем делаешь)?
PM MAIL   Вверх
LSD
Дата 29.12.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538




M
LSD
Перенесено из баз данных


Добавлено через 3 минуты и 11 секунд
Цитата(corpsehunter @  29.12.2007,  00:49 Найти цитируемый пост)
И забыл добавить самое главное - у меня Oracle 9i, правда я и сам уже нашел, что они появились только начиная с 10g...

Можно написать хранимую процедуру на Java.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
corpsehunter
Дата 29.12.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Цитата(skyboy @  29.12.2007,  10:13 Найти цитируемый пост)
я сразу как-то не заметил постановку задачи. а почему не проверять валидность адреса на стороне клиента БД(РНР там или ASP.NET - на чем делаешь)?

Да не, все куда проще - это для лабы надо и надо именно на Оракл, по этому просто поставил 10g и проблем нету=))))
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
Nuzur
Дата 29.1.2008, 18:08 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5





corpsehunter

А чем тебе такой вариант не угодил?

Код

DECLARE
       my_var VARCHAR(50);
BEGIN

     IF( '[email protected]' LIKE '_%@_%._%' )
     THEN
         DBMS_OUTPUT.put_line(' Correct! ' );
     ELSE
         DBMS_OUTPUT.put_line(' WRONG!!!! ' );
     END IF;
END;


my_var там лишний в него хотел запихнуть разные адреса для наглядности но потом линиво стало smile Так чем такой вариант проверки не устроит?



--------------------
Never again...
PM MAIL   Вверх
LSD
Дата 30.1.2008, 13:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Nuzur @  29.1.2008,  18:08 Найти цитируемый пост)
А чем тебе такой вариант не угодил?

Как он среагирует на [email protected]?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Nuzur
Дата 31.1.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



LSD, ну знаеш, тоелепатический контакт у PL/SQL еще не видел. Так что он и на идиns@на.йух Нормально отреагирует, но суть в том что регулярность выражения аппрувлена, а про числа ты никак не словишь, ведь в названиях сайиа либо мейла запросто могут быть... так шо "не биллинговая проблема" smile
Но замечание принято.


--------------------
Never again...
PM MAIL   Вверх
corpsehunter
Дата 3.2.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Такое решение я тоже рассматривал... Собственно говоря, цифры в названии ящика и домена возможны, не могут они быть только в имени домена верхнего уровня, т.е. ящик типа [email protected] вполне может быть, так что числа и ловить не надо, кроме как там, где уже указано...
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
Nuzur
Дата 4.2.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



corpsehunter, Если найдете более красивое решение поделитесь пожалуйста. Я такую траблу на сях в свое время решал и ничего лучше не придумал. Правда я потом и не думал дальше то smile
ЗЫ простите за оффтоп.


--------------------
Never again...
PM MAIL   Вверх
alt5000
Дата 22.4.2010, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 9.4.2006
Где: г. Выборг

Репутация: нет
Всего: нет



А как насчет split в regex'ах Оракла?
PM MAIL WWW   Вверх
DimW
Дата 22.4.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(alt5000 @  22.4.2010,  10:22 Найти цитируемый пост)
А как насчет split в regex'ах Оракла? 


а как насчет того, что тема обсуждалась два года назад и версия оракла 9i?
PM MAIL ICQ   Вверх
alt5000
Дата 22.4.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 9.4.2006
Где: г. Выборг

Репутация: нет
Всего: нет



Цитата(DimW @ 22.4.2010,  10:40)
а как насчет того, что тема обсуждалась два года назад и версия оракла 9i?

Я спросил, потому что интересует сплит (чтобы не начинать новые темы). Не подскажете, как в массив передать разделенные через сплит части строки?
PM MAIL WWW   Вверх
DimW
Дата 22.4.2010, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(alt5000 @  22.4.2010,  10:53 Найти цитируемый пост)
Я спросил

 smile извини, я подумал это ответ - серьезно.
PM MAIL ICQ   Вверх
Zloxa
Дата 22.4.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(corpsehunter @  29.12.2007,  00:49 Найти цитируемый пост)
 у меня Oracle 9i

owa_pattern
Цитата(alt5000 @  22.4.2010,  10:53 Найти цитируемый пост)
 в массив передать разделенные через сплит части строки

Можно сделать sql+регекспами, офигенски круто, лаконично - в одно выражение
А можно просто по пацански instr-ами, тупо, не интересно, но трошки-трошки шустрее...в пиццот раз лишто
Код

declare
  type varchar_table is table of varchar2(200);
  foo varchar_table;
  src varchar2(4000);
  start_time number;
 
  function regexp_split(src varchar2)
    return varchar_table
  is
    result varchar_table;
  begin
    select rtrim(regexp_substr(str,'[^,]+,?',1,level),',')
      bulk collect into result
      from (select src str from dual)
      connect by regexp_substr(str,'[^,]+,?',1,level) is not null;
    return result;
  end;
  function instr_split(src varchar2)
    return varchar_table
  is
    result varchar_table := varchar_table();
    cur_pos number := 1;
    next_pos number;
    len number := nvl(length(src),0);
  begin
    while cur_pos <= len loop
      next_pos := instr(src||',',',',cur_pos);
      result.extend(1);
      result(result.count):= substr(src,cur_pos,next_pos - cur_pos);
      cur_pos := next_pos + 1;
    end loop;
    return result;
  end;
begin
  src := '1';
  for i in 1..100
  loop
    src := src||','||sys_guid;
  end loop;
  start_time := dbms_utility.get_time;
  for i in 1..500
  loop
    foo := regexp_split(src);
  end loop;
  dbms_output.put_line('sql+regexp:'||(dbms_utility.get_time-start_time));
  start_time := dbms_utility.get_time;
  for i in 1..500
  loop
    foo := instr_split(src);
  end loop;
  dbms_output.put_line('pl/sql+instr:'||(dbms_utility.get_time-start_time));
end;
/
 
sql+regexp:4971
pl/sql+instr:10
 
PL/SQL procedure successfully completed


Цитата(DimW @  22.4.2010,  10:40 Найти цитируемый пост)
а как насчет того, что тема обсуждалась два года назад

на то - пофиг, когда интересно


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1105 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.