Донецкий техникум промышленной автоматики

Регулярні вирази Oracle (regular expression)

  1. Регулярні вирази Oracle

Регулярні вирази відбулися з теорій автоматів і формальних мов, тому спочатку виробляють страхітливе враження
Регулярні вирази відбулися з теорій автоматів і формальних мов, тому спочатку виробляють страхітливе враження. Однак, їх базові поняття є простими і в той же час потужними.
Починаючи з версії Oracle 10g регулярні вирази можна використовувати безпосередньо в SQL запитах.

Шаблон регулярних виразів виражається у вигляді рядка, що містить такі конструкції:

  • Літеральние символи. Фактичні символи, які слід шукати (Наприклад, шаблон xyz відповідає тільки входженню «xyz»)
  • Метасимволи. Операції, що визначають алгоритми, які повинні застосовуватися під час пошуку (Наприклад, шаблон ^ xyz відповідає лише рядку, що починається з «xyz» - інші входження не враховуються)

оператор REGEXP_LIKE

REGEXP_LIKE (ісходная_строка, шаблон [, параметр_сопоставленія])

ісходная_строка підтримує символьні типи даних (CHAR, VARCHAR2, CLOB, NCHAR, NVARCHAR2 і NCLOB, але не LONG) шаблон це інша назва регулярного виразу параметр_сопоставленія дозволяє використовувати додаткові параметри, такі як символ переходу на новий рядок, многострочное форматування і забезпечення керування засобами обліку регістра

Використовується подібно оператору like в частині where або ж при визначенні обмеження на таблицю (constraint).

Приклад використання регулярних виразів:

функція REGEXP_INSTR

REGEXP_INSTR (ісходная_строка, шаблон [, начальная_позіція [, входження [, опція_возврата [, параметр_сопоставленія]]]])

ісходная_строка підтримує символьні типи даних (CHAR, VARCHAR2, CLOB, NCHAR, NVARCHAR2 і NCLOB, але не LONG) шаблон регулярний вираз начальная_позіція позиція, з якої повинен починатися пошук входження за замовчуванням має значення 1, якщо користувач не вкаже пошук послідовних входжень опція_возврата значення по умовчанням 0, тоді повернеться початкова позиція шаблону; при значенні 1 повертається позиція символу, наступного за шаблоном параметр_сопоставленія дозволяє використовувати додаткові параметри, такі як символ переходу на новий рядок, многострочное форматування і забезпечення керування засобами обліку регістра

Функція повертає позицію символу, находящегосяв початку або наприкінці відповідності для шаблону, так само як і її аналог instr.

На відміну від instr, функція regexp_instr працює з початку рядка і рухається вперед у пошуках шаблону. Вона не може почати з кінця рядка і переміщатися в зворотному напрямку.

функція REGEXP_SUBSTR

REGEXP_SUBSTR (ісходная_строка, шаблон [, позиція [, входження [, параметр_сопоставленія]]])

ісходная_строка підтримує символьні типи даних (CHAR, VARCHAR2, CLOB, NCHAR, NVARCHAR2 і NCLOB, але не LONG) шаблон регулярний вираз позиція позиція, з якої необхідно починати пошук входження за замовчуванням має значення 1 параметр_сопоставленія дозволяє використовувати додаткові параметри, такі як символ переходу на новий рядок, многострочное форматування і забезпечення керування засобами обліку регістра


Функція REGEXP_SUBSTR повертає підрядок, яка відповідає шаблоном.

Приклад використання регулярних виразів:

функція REGEXP_REPLACE

REGEXP_REPLACE (ісходная_строка, шаблон [, строка_замени [, позиція [, входження, [параметр_сопоставленія]]]])

ісходная_строка підтримує символьні типи даних (CHAR, VARCHAR2, CLOB, NCHAR, NVARCHAR2 і NCLOB, але не LONG) шаблон регулярний вираз шаблон заміни текст для заміни кожного входження позиція позиція, з якої необхідно починати пошук входження за замовчуванням має значення 1 параметр_сопоставленія дозволяє використовувати додаткові параметри, такі як символ переходу на новий рядок, многострочное форматування і забезпечення керування засобами обліку регістра

REGEXP_REPLACE повертає змінену вхідні рядок, в якій всі входження шаблону замінені значенням, переданим в параметрі строка_замени.

Приклад використання регулярних виразів:

Регулярні вирази Oracle

Таблиця 1: Метасимволи прив'язки

Метасимвол Опис Приклад ^ Прив'язати вираження до початку рядка «^ привіт» відповідає «привіт, як справи», але не «як справи, привіт» $ Прив'язати вираження до кінця рядка «привіт $» відповідає «як справи, привіт», але не « Привіт як справи"

Таблиця 2: квантіфікатор і оператори повтору

Квантіфікатор Опис Приклад * Зустрічається 0 і більше разів REGEXP_REPLACE (str, '11 * ',' 1 ')
результат:
test11 => test1
11123345 => 123345? Зустрічається 0 або 1 раз + зустрічається 1 і більше разів REGEXP_LIKE (str, '5 +')
результат:
test11 => false
11123345 => true {m} Зустрічається рівно m раз REGEXP_LIKE (str, '3 {2}')
результат:
test11 => false
11123345 => true {m} Зустрічається принаймні m раз {m, n} Зустрічається принаймні m раз, але не більше n раз

Таблиця 3: Визначені символьні класи POSIX

Клас символів Опис. Будь-який символ [: alpha:] Букви [: lower:] Букви в нижньому регістрі [: upper:] Букви в верхньому регістрі [: digit:] Цифри [: alnum:] Букви і цифри [: space:] Прогалини (не друкувати символи ), такі як переклад каретки, новий рядок, вертикальна табуляція і подача сторінки [: punct:] знаки [: cntrl:] Керуючі символи (не друкувати) [: print:] друковані символи

Таблиця 4: Альтернативне зіставлення і угруповання виразів

Метасимвол Опис | Альтернатива Розділяє альтернативні варіанти, часто використовується з оператором угруповання () () Група групуються подвираженія для альтернативи, квантіфікатора або посилальної [char] Список символів Означає список символів; більшість метасимволов в списку символів є літери, за винятком символьних класів і метасимволов ^ і - [^ char] Список символів Список символів, які не повинні бути присутніми в рядку

Таблиця 5: Метасимвол посилання

Метасимвол Опис \ digit Зворотній коса риска

За нею йде цифра від 1 до 9, зворотна коса риса пов'язана з попереднім зіставленням з відповідним номером укладеного в дужки подвираженія.

(Зауважте: Зворотній коса риска може мати інше значення в регулярному виразі; в залежності від контексту вона може означати також символ Escape

Більш повну інформацію можна прочитати тут Using Regular Expressions in Oracle Database

Схожі записи: