Регулярні вирази відбулися з теорій автоматів і формальних мов, тому спочатку виробляють страхітливе враження. Однак, їх базові поняття є простими і в той же час потужними.
Починаючи з версії 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