REGEXP_REPLACE ФУНКЦИЯ

В этом учебном пособии вы узнаете, как использовать функцию REGEXP_REPLACE Oracle/PLSQL с синтаксисом и примерами.

Описание

Функция Oracle/PLSQL REGEXP_REPLACE является расширением функции REPLACE. Эта функция, введенная в Oracle 10g, позволит вам заменить последовательность символов в строке другим набором символов, используя сопоставление шаблонов регулярных выражений.

Синтаксис

Синтаксис функции Oracle/PLSQL REGEXP_REPLACE :

REGEXP_REPLACE( string, pattern [, replacement_string [, start_position [, nth_appearance [, match_parameter ] ] ] ] )

Параметры или аргументы

string
Строка для поиска. Это могут быть CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.

pattern
Шаблон. Регулярное выражение для сопоставления. Это может быть комбинацией следующих значений:

Значение Описание
^ Соответствует началу строки. При использовании match_parameter с m, соответствует началу строки в любом месте в пределах выражения.
$ Соответствует концу строки. При использовании match_parameter с m, соответствует концу строки в любом месте в пределах выражения.
* Соответствует нолю или более вхождений.
+ Соответствует одному или более вхождений.
? Соответствует нолю или одному вхождению.
. Соответствует любому символу, кроме NULL.
| Используется как "OR", чтобы указать более одной альтернативы.
[ ] Используется для указания списка совпадений, где вы пытаетесь соответствовать любому из символов в списке.
[^ ] Используется для указания списка nonmatching, где вы пытаетесь соответствовать любому символу, за исключением тех кто в списке.
( ) Используется для групповых выражений в качестве подвыражений.
{m} Соответствует m раз.
{m,} Соответствие как минимум m раз.
{m,n} Соответствие как минимум m раз, но не более n раз.
\n n представляет собой число от 1 до 9. Соответствует n-му подвыражению находящемуся в ( ) перед \n.
[..] Соответствует одному сопоставлению элемента, который может быть более одного символа.
[::] Соответствует классу символов.
[==] Соответствует классу эквивалентности
\d Соответствует цифровому символу.
\D Соответствует не цифровому символу.
\w Соответствует текстовому символу.
\W Соответствует не текстовому символу.
\s Соответствует символу пробел.
\S Соответствует не символу пробел.
\A Соответствует началу строки или соответствует концу строки перед символом новой строки.
\Z Соответствует концу строки.
*? Соответствует предыдущему шаблону ноль или более вхождений.
+? Соответствует предыдущему шаблону один или более вхождений.
?? Соответствует предыдущему шаблону ноль или одному вхождению.
{n}? Соответствует предыдущему шаблону n раз.
{n,}? Соответствует предыдущему шаблону, по меньшей мере n раз.
{n,m}? Соответствует предыдущему шаблону, по меньшей мере n раз, но не более m раз.

replacement_string
Необязательный. Соответствующие шаблоны в строке будут заменены на replace_string. Если параметр replacement_string опущен, то функция просто удаляет все совпадающие шаблоны и возвращает полученную строку.

start_position
Необязательный. Это позиция в строке, откуда начнется поиск. Если этот параметр опущен, по умолчанию он равен 1, который является первой позицией в строке.

nth_appearance
Необязательный. Это n-й вид шаблона в строке. Если этот параметр опущен, по умолчанию он равен 1, который является первым вхождением шаблона в строке. Если вы укажете 0 для этого параметра, все вхождения шаблона в строке будут заменены.

match_parameter
Необязательный. Это позволяет изменять поведение соответствия для условия REGEXP_REPLACE. Это может быть комбинацией следующих значений:

Значение Описание
'c' Выполняет чувствительное к регистру согласование.
'i' Выполняет не чувствительное к регистру согласование.
'n' Позволяет период символа (.) для соответствия символа новой строки. По умолчанию, период метасимволы.
'm' Выражение допускает, что есть несколько строк, где ^ это начало строки, а $ это конец строки, независимо от позиции этих символов в выражении. По умолчанию предполагается, что выражение в одной строке.
'x' Игнорируются символы пробелов. По умолчанию, символы пробелов совпадают, как и любой другой символ.

Функция REGEXP_REPLACE возвращает строковое значение.

Примечание

  • Если для параметра match_parameter имеются противоречивые значения, функция REGEXP_REPLACE будет использовать последнее значение.
  • См. также функцию REPLACE.

Применение

Функция REGEXP_REPLACE может использоваться в следующих версиях Oracle/PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g

Пример совпадения с первым словом

Рассмотрим пример использования функции REGEXP_REPLACE для замены первого слова в строке.

Например:

Этот пример вернет 'Google is a great search engine.', потому что начало совпадения в начале строки, как указано символом ^, а затем найдет первое слово в соответствии с (\S*). Затем функция заменит это первое слово на 'Google'.

Пример совпадения цифр

Рассмотрим пример, как мы будем использовать функцию REGEXP_REPLACE для сопоставления шаблону цифровых символов.

Например:

Этот пример заменит все числа в строке, как указано в шаблоне \d, на символ @.

Мы могли бы изменить наш шаблон для поиска только двухзначных чисел.

Например:

Этот пример заменит число, которое имеет две цифры, как указано в шаблоне (\d)(\d). В этом случае он пропустит числовые значения 2 и 5 и заменит 10 символом @.

Теперь рассмотрим, как мы будем использовать функцию REGEXP_REPLACE со столбцом таблицы для замены двухзначных чисел.
Например:

В этом примере мы заменим все двузначные значения поля address в таблице contacts на значение 'Str'.

Пример сопоставления нескольких альтернатив.

Следующий пример, который мы рассмотрим, включает использование | шаблон. | шаблон используется как «ИЛИ», чтобы указать несколько альтернатив.

Например:

Этот пример вернет 'ARrRSmRth', потому что он ищет первую гласную (a, e, i, o или u) в строке. Поскольку мы не указали значение match_parameter, функция REGEXP_REPLACE будет выполнять поиск с учетом регистра, что означает, что 'A' в 'AeroSmith' не будет сопоставляться.

Мы могли бы изменить наш запрос, чтобы выполнить поиск без учета регистра следующим образом:

Теперь, поскольку мы указали match_parameter = 'i', запрос заменит 'A' в строке. На этот раз 'A' в 'AeroSmith' сопоставится с шаблоном. Заметим также, что мы указали 5-й параметр как 0, чтобы были заменены все вхождения.

Теперь рассмотри, как вы будете использовать эту функцию со столбцом.

Итак, допустим, у нас есть таблица contact со следующими данными:

contact_id last_name
1000 AeroSmith
2000 Joy
3000 Scorpions

Теперь давайте запустим следующий запрос:

Запрос вернет следующие результаты:

contact_id last_name New Name
1000 AeroSmith RRrRSmRth
2000 Joy JRy
3000 Scorpions ScRrpRRns

Пример совпадений на основе параметра nth_occurrence

Следующий пример, который мы рассмотрим, включает параметр nth_occurrence. Параметр nth_occurrence позволяет вам выбрать, какое вхождение шаблона вы хотите заменить в строке.

Первое вхождение

Рассмотрим, как заменить первое вхождение шаблона в строке.

Например:

Этот пример заменит третий символ (‘e’) в 'Scorpions', потому что он заменяет первое вхождение гласного (a, e, i, o или u) в строке.

Второе вхождение

Затем мы выберем для второго вхождения шаблона в строку.

Например:

Этот пример заменит шестой символ ('i') в 'Scorpions', потому что он заменяет второе вхождение гласного (a, e, i, o или u) в строке.

Третье вхождение

Например:

Этот пример заменит седьмой символ ('o') в 'Scorpions', потому что он заменяет третье вхождение гласного (a, e, i, o или u) в строке.