В этом учебном пособии вы узнаете, как использовать MariaDB функцию REGEXP_INSTR с синтаксисом и примерами.
Описание
MariaDB функция REGEXP_INSTR является расширением функции INSTR. Возвращает расположение регулярного выражения pattern в string. Эта функция, представленная в MariaDB 10.0.5, позволит вам найти подстроку в строке, используя сопоставление с образцом регулярного выражения.
Синтаксис
Синтаксис функции REGEXP_INSTR в 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_INSTR выполняет сопоставление без учета регистра, кроме случаев, когда используется с двоичными строками.
- Если функция REGEXP_INSTR не находит вхождения pattern, она возвращает NULL.
- Эта страница относится к MariaDB 10.0.5 и выше, использующим библиотеку регулярных выражений PCRE.
- Смотрите также функцию INSTR.
Применение
Функция REGEXP_INSTR может использоваться в следующих версиях MariaDB:
- MariaDB 10.0.5+
Пример совпадение по одному символу
Давайте начнем с рассмотрения самого простого случая. Найдем позицию первого символа 't' в строке, используя функцию REGEXP_INSTR.
Например:
1 2 3 |
SELECT REGEXP_INSTR ('Большому кораблю — большое плавание', 'б'); --Результат: 1 |
Этот пример вернет 1, потому что он выполняет поиск 'б' без учета регистра. Следовательно, он соответствует символу 'Б' в первой позиции.
Поиск с учетом регистра
Если мы хотим выполнить поиск с учетом регистра только для строчной буквы 'б', нам нужно изменить нашу функцию REGEXP_INSTR для использования двоичной строки. Это можно сделать одним из двух способов.
1 2 3 |
SELECT REGEXP_INSTR (BINARY 'Большому кораблю — большое плавание', 'б'); --Результат: 14 |
В приведенном выше примере мы использовали ключевое слово BINARY, чтобы преобразовать нашу строку в двоичную строку.
Теперь функция REGEXP_INSTR вернет 14, потому что она будет выполнять поиск с учетом регистра и искать только значения 'б' (и исключать значения 'Б').
Мы могли бы также выполнить поиск с учетом регистра, используя сопоставление с шаблоном следующим образом
1 2 3 |
SELECT REGEXP_INSTR ('Большому кораблю — большое плавание', '(?-i)б'); --Результат: 14 |
Этот пример также соответствует первому символу 'б' в строке и игнорирует значения 'Б'.
Пример совпадение по нескольким символам
Давайте посмотрим, как мы будем использовать функцию REGEXP_INSTR для сопоставления с многосимвольным шаблоном.
Например:
1 2 3 |
SELECT REGEXP_INSTR ('Пример покажет как испльзовать REGEXP_INSTR', 'ка'); --Результат: 10 |
Этот пример вернет первое вхождение 'ка' в строке. Это будет соответствовать 'ка' в слове 'покажет'.
Теперь давайте посмотрим, как мы будем использовать функцию REGEXP_INSTR со столбцом таблицы и искать несколько символов.
Например:
1 2 |
SELECT REGEXP_INSTR (other_comments, 'the') FROM contacts; |
В этом примере мы будем искать шаблон 'the' в поле other_comments в таблице contacts.
Пример совпадение на нескольких альтернативах
Следующий пример, который мы рассмотрим, включает использование шаблона |
. Шаблон |
используется как "OR" для указания более одной альтернативы.
Например:
1 2 3 |
SELECT REGEXP_INSTR ('Андерсон', 'a|е|и|о|у'); --Результат: 1 |
Этот пример вернет 1, потому что он ищет первый гласный (a, е, и, о или у) в строке. Функция REGEXP_INSTR будет выполнять поиск без учета регистра, что означает, что 'А' в 'Андерсон' будет сопоставляться как 'а'.
Теперь давайте быстро покажем, как бы вы использовали эту функцию со столбцом.
Допустим, у нас есть таблица contact со следующими данными:
contact_id | last_name |
---|---|
1000 | Андерсон |
2000 | Смит |
3000 | Джонсон |
Теперь запустим следующий запрос:
1 2 |
SELECT contact_id, last_name, REGEXP_INSTR (last_name, 'a|е|и|о|у') AS first_occurrence FROM contacts; |
Это результаты, которые будут возвращены запросом:
contact_id | last_name | first_occurrence |
---|---|---|
1000 | Андерсон | 1 |
2000 | Смит | 3 |
3000 | Джонсон | 2 |