В этом учебном пособии вы узнаете, как использовать MariaDB функцию REGEXP_SUBSTR с синтаксисом и примерами.
Описание
MariaDB функция REGEXP_SUBSTR является расширением функции SUBSTR. Эта функция, представленная в MariaDB 10.0.5, позволит вам извлечь подстроку в строке, используя сопоставление с образцом регулярного выражения.
Синтаксис
Синтаксис функции REGEXP_SUBSTR в 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 раз.
Примечание
- Функция REGEXP_SUBSTR выполняет сопоставление без учета регистра, кроме случаев, когда используется с двоичными строками.
- Если функция REGEXP_SUBSTR не находит вхождения pattern, она возвращает NULL.
- Эта страница относится к MariaDB 10.0.5 и выше, использующим библиотеку регулярных выражений PCRE.
- Смотрите также функцию SUBSTR.
Применение
Функция REGEXP_SUBSTR может использоваться в следующих версиях MariaDB:
- MariaDB 10.0.5+
Пример совпадение на нескольких альтернативах
Давайте начнем с рассмотрения того, как использовать шаблон
Например:
1 2 3 4 5 6 7 |
SELECT REGEXP_SUBSTR ('Ball Point Pen','P(a|e|i)n')); --Результат: 'Pen' SELECT REGEXP_SUBSTR ('Eggs and pancakes','P(a|e|i)n'); --Результат: 'pan' |
Эти примеры REGEXP_SUBSTR будут возвращать значения, такие как Pan, Pen или Pin. Шаблон
Поиск с учетом регистра
Если мы хотим выполнить поиск с учетом регистра, нам нужно изменить нашу функцию REGEXP_SUBSTR для использования двоичной строки. Это можно сделать одним из двух способов.
1 2 3 |
SELECT REGEXP_SUBSTR (BINARY 'Eggs and pancakes', 'P(a|e|i)n'); --Результат: NULL |
Или
1 2 3 |
SELECT REGEXP_SUBSTR ('Eggs and pancakes' COLLATE utf8_bin, 'P(a|e|i)n'); --Результат: NULL |
В первом примере мы использовали ключевое слово BINARY, чтобы преобразовать нашу строку в двоичную строку. Во втором примере мы использовали COLLATE для преобразования нашей строки в двоичную строку.
Поскольку мы выполняем поиск с учетом регистра, шаблон не совпадает на 'pancakes', потому что ему требуется заглавная буква 'P', поэтому функция REGEXP_SUBSTR будет возвращать NULL.
Поиск столбцов таблицы
Теперь давайте покажем, как использовать функцию REGEXP_SUBSTR со столбцом таблицы:
Допустим, у нас есть таблица contact со следующими данными:
cоntact_id | last_name |
---|---|
1000 | Андерсон |
2000 | Смит |
3000 | Джонсон |
Теперь запустим следующий запрос:
1 2 |
SELECT cоntact_id, last_name, REGEXP_SUBSTR (last_name, 'a|e|i|o|u') AS "First Vowel" FROM cоntacts; |
Это результаты, которые будут возвращены запросом:
cоntact_id | last_name | First Vowel |
---|---|---|
1000 | Андерсон | A |
2000 | Смит | и |
3000 | Джонсон | о |
Пример совпадение по словам
Далее давайте рассмотрим, как использовать функцию REGEXP_SUBSTR для извлечения первого слова из строки.
Например:
1 2 3 |
SELECT REGEXP_SUBSTR ('Oracleplsql is a great resource', '(\\S*)'); --Результат: 'Oracleplsql' |
В этом примере будет возвращено 'Oracleplsql', поскольку он извлечет все непробельные символы, как указано в (\\S*)
, и остановится, когда достигнет первого символа пробела (т.о. пробел). Это приведет к тому, что будет возвращено слово 'Oracleplsql' .
Если вы хотите вернуть первые два слова из строки, мы можем изменить пример следующим образом:
1 2 3 |
SELECT REGEXP_SUBSTR ('Oracleplsql is a great resource', '(\\S*)(\\s)(\\S*)'); --Результат: 'Oracleplsql is' |
Этот пример извлечет первые два слова из строки. (\\S*)
соответствует первому слову в строке, (\\s)
соответствует первому непробельному символу и (\\S*)
соответствует второму слову в строке.
Пример совпадение по символам
Теперь давайте посмотрим, как мы будем использовать функцию REGEXP_SUBSTR для сопоставления с символами из одной цифры.
Например:
1 2 3 |
SELECT REGEXP_SUBSTR ('7, 8, и 15 - это числа для примера', '\\d'); --Результат: 7 |
В этом примере извлекается первое число из строки, как указано в \\d
. В этом случае он будет совпадать с числом 7.
Мы могли бы изменить наш шаблон для поиска двузначного числа.
Например:
1 2 3 |
SELECT REGEXP_SUBSTR ('7, 8, и 15 - это числа для примера', '(\\d)(\\d)'); --Результат: 15 |
В этом примере будет извлечено число, имеющее рядом две цифры , как указано в (\\d)(\\d)
. В этом случае он пропустит числовые значения 7 и 8 и вернет 15.
Теперь давайте посмотрим, как мы будем использовать функцию REGEXP_SUBSTR со столбцом таблицы и искать двухзначное число.
Например:
1 2 |
SELECT REGEXP_SUBSTR (address, '(\\d)(\\d)') FROM contacts; |
В этом примере мы собираемся извлечь первое двузначное значение из поля address в таблице contacts.