В этом учебном пособии вы узнаете, как использовать MariaDB функцию REGEXP_REPLACE с синтаксисом и примерами.
Описание
MariaDB функция REGEXP_REPLACE является расширением функции REPLACE. Эта функция, представленная в MariaDB 10.0.5, позволит вам заменить все вхождения подстроки в строке, используя сопоставление с образцом регулярного выражения.
Синтаксис
Синтаксис функции REGEXP_REPLACE в MariaDB:
Параметры или аргументы
- string
- Строка для поиска.
- pattern
- Информация о совпадении регулярного выражения. Это может быть сочетание следующего:
Значение Описание ^ Соответствует началу строки. Если используется с match_parameter, равным 'm', он соответствует началу строки в любом месте expression. $ Соответствует концу строки. Если используется с match_parameter, равным 'm', он совпадает с концом строки в любом месте внутри expression. * Совпадает с нулем или более вхождений. + Соответствует одному или нескольким вхождениям. ? Соответствует нулю или одному вхождению. . Соответствует любому символу, кроме NULL. | Используется как OR указать более одной альтернативы. [ ] Используется для указания списка совпадений, в котором вы пытаетесь сопоставить любой из символов в списке. [^ ] Используется для указания несоответствующего списка, в котором вы пытаетесь сопоставить любой символ, кроме тех, что в списке. ( ) Используется для группировки выражений как подвыражения. {m} Соответствует m раз. {m,} Совпадает не менее m раз. {m,n} Соответствует не менее m раз, но не более n раз. \n n - это число от 1 до 9. Соответствует n-му подвыражению, найденному в () перед тем, как встретить \n. [..] Соответствует одному элементу сопоставления, который может содержать более одного символа. [::] Соответствует классу символов. [==] Соответствует классу эквивалентности. \d Соответствует цифровому символу. \D Соответствует нецифровому символу. \w Соответствует буквенному символу. \W Соответствует небуквенному символу. \s Соответствует пробелу. \S Соответствует непробельному символу. *? Соответствует предыдущему шаблону ноль или более вхождений. +? Соответствует предыдущему шаблону одному или нескольким вхождениям. ?? Соответствует предыдущему шаблону ноль или одно вхождение. {n}? Соответствует предыдущему шаблону n раз. {n,}? Соответствует предыдущему шаблону не менее n раз. {n,m}? Соответствует предыдущему шаблону не менее n раз, но не более m раз. - replacement
- Замена подстроки. Все вхождения pattern, найденные в string, заменяются на replacement.
Примечание
- Если функция REGEXP_REPLACE не находит вхождения pattern, она вернет исходную строку без каких-либо изменений.
- Эта страница относится к MariaDB 10.0.5 и выше, использующим библиотеку регулярных выражений PCRE.
- См. также функцию REPLACE.
Применение
Функция REGEXP_REPLACE может использоваться в следующих версиях MariaDB:
- MariaDB 10.0.5+
Пример совпадение на нескольких альтернативах
Давайте начнем с рассмотрения того, как использовать шаблон |
с функцией REGEXP_REPLACE в MariaDB.
Например:
1 2 3 |
SELECT REGEXP_REPLACE ('The Show Mast Go On','a|e|i|o', '8'); --Результат: 'Th8 Sh8w M8st G8 8n' |
Эти примеры REGEXP_REPLACE заменят все вхождения букв 'a', 'e', 'o' или 'i' в строке 'Google.com' на '8'. Функция REGEXP_REPLACE выполняет поиск без учета регистра, поэтому не имеет значения, является ли 'a', 'e', 'o' или 'i' значениями в верхнем или нижнем регистре.
Поиск с учетом регистра
Если мы хотим выполнить поиск с учетом регистра, нам нужно изменить нашу функцию REGEXP_REPLACE для использования двоичной строки. Это можно сделать с помощью шаблона (?-i)
.
1 2 3 |
SELECT REGEXP_REPLACE ('The Show Mast Go On', '(?-i)a|(?-i)e|(?-i)i|(?-i)o', '8'); --Результат: 'Th8 Sh8w M8st G8 On' |
В этом примере мы использовали шаблон (?-i)
, чтобы заставить функцию REGEXP_REPLACE выполнять сопоставление с учетом регистра. Так что теперь символ "O" в верхнем регистре в 'The Show Mast Go On' не заменяется на "8".
Поиск столбцов таблицы
Теперь давайте покажем, как использовать функцию REGEXP_REPLACE со столбцом таблицы:
Допустим, у нас есть таблица contact со следующими данными:
contact_id | last_name |
---|---|
1000 | Андерсон |
2000 | Смит |
3000 | Джонсон |
Теперь запустим следующий запрос:
1 2 |
SELECT contact_id, last_name, REGEXP_REPLACE (last_name, 'а|е|и|о|у', 'z') AS Result FROM contacts; |
Это результаты, которые будут возвращены запросом:
contact_id | last_name | Result |
---|---|---|
1000 | Андерсон | zндzрсzн |
2000 | Смит | Смzт |
3000 | Джонсон | Джzнсzн |
Пример совпадение по словам
Далее давайте рассмотрим, как использовать функцию REGEXP_REPLACE для замены первого слова в строке.
Например:
1 2 3 |
SELECT REGEXP_REPLACE ('Yandex.com is a great resource', '(\\S*)', 'Google.com'); --Результат: 'Google.com is a great resource' |
В этом примере будет возвращено 'Google.com is a great resource', поскольку он заменит все непробельные символы, как указано в (\\S*)
, и остановится, когда попадет в первый символ пробела (т.е.: пробел ). Это приведет к замене слова "Yandex.com" на "Google.com".
Пример совпадение по цифровым символам
Теперь давайте посмотрим, как мы будем использовать функцию REGEXP_REPLACE для сопоставления с шаблоном цифр.
Например:
1 2 3 |
SELECT REGEXP_REPLACE ('7, 8, и 15 - это числа для примера', '\\d', 'abc'); --Результат: 'abc, abc, и abcabc это числа для примера' |
В этом примере числовые цифры в строке будут заменены на "abc". как указано в \\d
. В этом случае он будет совпадать с номерами 7, 8 и 15.
Мы могли бы изменить наш шаблон, чтобы заменить только двузначные числа.
Например:
1 2 3 |
SELECT REGEXP_REPLACE ('7, 8, и 15 - это числа для примера', '(\\d)(\\d)', 'abc'); --Результат: '7, 8, и abc - это числа для примера' |
В этом примере все двузначные числа будут заменены на 'abc', как указано в (\\d)(\\d)
. В этом случае он пропустит числовые значения 7 и 8 и заменит только число 15.
Теперь давайте посмотрим, как мы будем использовать функцию REGEXP_REPLACE со столбцом таблицы и искать двузначное число.
Например:
1 2 |
SELECT REGEXP_REPLACE (address, '\\d', '') FROM contacts; |
В этом примере мы собираемся удалить все числа из поля address в таблице contacts. Это делается путем поиска всех чисел с использованием \\d
и замены на "".