Регулярные выражения являются очень полезным механизмом, многих языков программирования. До Версии 10g в Oracle регулярки не было, и приходилось обходиться обычными строковыми функциями поиска подстроки в строке, что было не всегда удобно. В 11g к уже существующим функциям по работе с регулярными выражениями добавилась ещё одна REGEXP_COUNT и расширился функционал 2х старых REGEXP_INSTR и REGEXP_SUBSTR.
Дальше перечислены функции, которые работают с регулярными выражениями в Oracle и приведены примеры их использования.
match_param может принимать следующие значения, включая их комбинацию:
Таблица 1: Метасимволы привязки
Таблица 2: Квантификаторы и операторы повтора
Таблица 3: Предопределенные символьные классы POSIX
Таблица 4: Альтернативное сопоставление и группировка выражений
Таблица 5: Метасимвол ссылки
Полный список символов, которые можно использовать в регулярных выражениях Oracle можно посмотреть по ссылке: Operators in Oracle SQL Regular Expressions
При написании этого текста использовались материалы со страниц: http://download.oracle.com и http://apps-oracle.ru/regular_expression-2/
Дальше перечислены функции, которые работают с регулярными выражениями в Oracle и приведены примеры их использования.
- REGEXP_LIKE(source_char, pattern [, match_param ])
source_char - текст, в котором выполняется поиск
pattern - регулярное выражение
match_param - модификаторы, изменяющие стандартный механизм сопоставления
Эта функция определяет, соответствует ли строка заданному шаблону.
Пример: SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')
ORDER BY first_name, last_name;
FIRST_NAME LAST_NAME
-------------------- -------------------------
Steven King
Steven Markle
Stephen Stiles
Эта функция определяет, соответствует ли строка заданному шаблону.
Пример: SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')
ORDER BY first_name, last_name;
FIRST_NAME LAST_NAME
-------------------- -------------------------
Steven King
Steven Markle
Stephen Stiles
- REGEXP_COUNT (source_char, pattern [, position [, match_param]]) (новинка в Oracle 11G)
source_char - текст, в котором выполняется поиск
pattern - регулярное выражение
position - позиция в строке, с которой необходимо начать поиск (по умолчанию 1)
match_param - модификаторы, изменяющие стандартный механизм сопоставления
Возвращает количество вхождений шаблона в строку.
Пример: SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
FROM DUAL;
REGEXP_COUNT
------------
5
Возвращает количество вхождений шаблона в строку.
Пример: SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
FROM DUAL;
REGEXP_COUNT
------------
5
- REGEXP_INSTR (source_char, pattern [, position [, occurrence [, return_opt [, match_param [, subexpr] ] ] ] ])
source_char - текст, в котором выполняется поиск
pattern - регулярное выражение
position - позиция в строке, с которой необходимо начать поиск (по умолчанию 1)
occurrence - искомое вхождение (по умолчанию 1)
match_param - модификаторы, изменяющие стандартный механизм сопоставления
subexpr - для шаблонов с подвыражениями, это число от 0 до 9, которое указывает, которое из подвыражений, является целью данной функции
Возвращает позицию символа, находящегося в начале или конце соответствия для шаблона.
Пример:SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 2)
"REGEXP_INSTR" FROM DUAL;
REGEXP_INSTR
-------------------
4
Возвращает позицию символа, находящегося в начале или конце соответствия для шаблона.
Пример:SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 2)
"REGEXP_INSTR" FROM DUAL;
REGEXP_INSTR
-------------------
4
- REGEXP_REPLACE(source_char, pattern [, replace_string [, position [, occurrenсe [, match_param ] ] ] ])
source_char - текст, в котором выполняется поиск
pattern - регулярное выражение
replace_string - шаблон для замены каждого вхождения (может содержать обратные ссылки)
position - позиция в строке, с которой необходимо начать поиск (по умолчанию 1)
occurrence - искомое вхождение (по умолчанию 1)
match_param - модификаторы, изменяющие стандартный механизм сопоставления
Функция по сути аналогичная REPLACE с тем отличием, что способна использовать регулярные выражения и результаты поиска при помощи обратных ссылок подставлять в шаблон для замены.
Пример:SELECT
REGEXP_REPLACE(phone_number,
'([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
'(\1) \2-\3') "REGEXP_REPLACE"
FROM employees
ORDER BY "REGEXP_REPLACE";
REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
. . .
Функция по сути аналогичная REPLACE с тем отличием, что способна использовать регулярные выражения и результаты поиска при помощи обратных ссылок подставлять в шаблон для замены.
Пример:SELECT
REGEXP_REPLACE(phone_number,
'([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
'(\1) \2-\3') "REGEXP_REPLACE"
FROM employees
ORDER BY "REGEXP_REPLACE";
REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
. . .
- REGEXP_SUBSTR(source_char, pattern [, position [, occurrence [, match_param [, subexpr ] ] ] ] )
source_char - текст, в котором выполняется поиск
pattern - регулярное выражение
position - позиция в строке, с которой необходимо начать поиск (по умолчанию 1)
occurrence - искомое вхождение (по умолчанию 1)
match_param - модификаторы, изменяющие стандартный механизм сопоставления
subexpr - для шаблонов с подвыражениями, это число от 0 до 9, которое указывает, которое из подвыражений, является целью данной функции
Функция ищет подстроку в строке, которая совпадает с шаблоном.
Пример:SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 4)
"REGEXP_SUBSTR" FROM DUAL;
REGEXP_SUBSTR
-------------------
78
Функция ищет подстроку в строке, которая совпадает с шаблоном.
Пример:SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 4)
"REGEXP_SUBSTR" FROM DUAL;
REGEXP_SUBSTR
-------------------
78
match_param может принимать следующие значения, включая их комбинацию:
- 'c' - сопоставление, чувствительное к регистру символов (по умолчанию)
- 'i' - сопоставление, нечувствительное к регистру символов
- 'n' - разрешить операцию сопоставления с любым символом
- 'm' - исходный текст разбит на множество строк
- 'x' - игнорировать пробельные символы (по умолчанию пробельные символы совпадают сами с собой)
Таблица 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 |
Полный список символов, которые можно использовать в регулярных выражениях Oracle можно посмотреть по ссылке: Operators in Oracle SQL Regular Expressions
При написании этого текста использовались материалы со страниц: http://download.oracle.com и http://apps-oracle.ru/regular_expression-2/
отличная статья, спасибо
ОтветитьУдалитьПожалуйста, рад, что она пригодилась
Удалить