Oracle та регулярні висловлювання - все про IT та програмування
Written on 03 Лютого 2009 . Posted in Oracle
Як мовилося раніше, регулярні висловлювання призначені знаходження відповідності в символьних рядках. Інше і можливо трохи ясніше визначення стверджує, що регулярні вирази є шаблонами, з якими порівнюються рядки символів щодо збігу чи відповідності рядки символів шаблону. Найближчий приклад або порівняння, яке я можу дати, - це приклад, який використовує порівняння LIKE, яке пропонує деякі форми відповідності шаблону або зразку. Наприклад, якщо ми хочемо знайти рядок символів, що містить 'Deborah', то могли б написати наступний SQL-запит. Цей запит дійсно поверне будь-який рядок, який містить 'Deborah' у будь-якому місці тексту в межах рядка символів. Щоб зробити швидко аналогічне порівняння за допомогою регулярного виразу, можна виконати наступний SQL-запит, який містить нову функцію REGEXP_LIKE. Отже, навіщо ми хочемо використовувати регулярні вирази замість того, щоб просто використовувати порівняння LIKE, з яким ми дуже добре знайомі? Головним чином, тому, що як тільки Ви починаєте ставити високорівневі питання про "схожість" рядка зразка, то, найімовірніше, закінчите умовою WHERE з багаторазовими порівняннями 'OR' і 'LIKE', щоб витягнути те, що Ви дійсно шукаєте. За допомогою регулярних виразів Ви можете здебільшого написати лише один зразок порівняння. Візьмемо попередній приклад. Припустимо, що нам потрібно знайти в романі головний персонаж Deborah, яку також називають 'Debbie'. У цьому випадку ми можемо змінити нашу умову для пошуку тексту на LIKE '%Deb%', і цим вирішити проблему. Але що трапиться, у цьому конкретному романі обговорюються такожфінансовий стан нашої дівчини із вищого суспільства. Ми можемо припинити пошук, знайшовши пропозиції, що містять слова типу 'Debt' або 'Debutante'. Ми маємо тепер дуже складну проблему. Щоб гарантувати, що ми знайдемо текст, що має безпосереднє відношення до Деборі, ми маємо використовувати регулярний вираз. Ось SQL-запит, який Ви маєте виконати. Тепер він знаходить всі пропозиції, де в романі йдеться про Дебора. Видно, що в межах зразка відповідності ми програмуємо варіанти тексту, що містить 'Debbie' або альтернативу 'Deborah', за допомогою опції (bieorah) у виразі. Це - канонічна форма побудови шаблону, яким виконується порівняння рядка.
Інша проблема, що часто викликає труднощі, - це з'ясування того, чи є число в рядку тексту або перевірка того, чи є число рядок символів. Для знаходження рядка, що містить число, яке відповідає зразку з десятковою точкою, Ви могли б використати цей метод. Маючи на увазі, що числа, які мають десяткову точку, повинні мати дійсне число після десяткової точки, я написав '+', щоб вказати одне або більше чисел. Щоб отримати імена, набрані важкими пальцями, де 'b', можливо , був набитий понад три рази; ми можемо використовувати наступний запит Регулярні висловлювання спочатку можуть здатися дуже хитромудрими. Мені навіть потрібні деякі зусилля, щоб згадати ці зразки, якщо я не використав їх якийсь час. Але після деяких витрат часу вивчення їх побудови Ви будете винагороджені, зіштовхнувшись зі складними критеріями пошуку.
Отже, де дізнатися, як будувати регулярні висловлювання. Це справді не так важко, як Ви могли б подумати. Регулярні висловлювання завжди супроводжували світ Unix, і тому є багатоінформації щодо них у мережі. Посібники Oracle включають кілька сторінок, близько 5, які присвячені регулярним виразам; тому краще почати звідси, а особливо тяжких випадках звертатися до мережі. Ви можете сміливо довіритися Yahoo, Google або будь-якій іншій вашій улюбленій пошуковій машині в пошуку посібників та вебсайтів, присвячених виключно регулярним виразам.