Регулярные выражения MYSQL (REGEXP) с синтаксисом и примерами
Что такое регулярные выражения?
Регулярные выражения помогают искать данные, соответствующие сложным критериям. Мы рассмотрели подстановочные знаки в предыдущем уроке. Если вы раньше работали с подстановочными знаками, вы можете спросить, зачем изучать регулярные выражения, если вы можете получить аналогичные результаты, используя подстановочные знаки. Потому что, по сравнению с подстановочными знаками, регулярные выражения позволяют нам искать данные, соответствующие еще более сложному критерию.
Основной синтаксис
Основной синтаксис регулярного выражения следующий:
SELECT statements... WHERE fieldname REGEXP 'pattern';
ЗДЕСЬ -
- «Операторы SELECT…» это стандарт Оператор SELECT
- «ГДЕ имя поля» — имя столбца, для которого должно быть выполнено регулярное выражение.
- «Шаблон REGEXP» REGEXP — это оператор регулярного выражения, а «шаблон» представляет собой шаблон, которому будет соответствовать REGEXP. RLIKE это синоним REGEXP и достигает тех же результатов, что и REGEXP. Чтобы не путать его с оператором LIKE, лучше использовать REGEXP .
Давайте теперь посмотрим на практический пример:
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Приведенный выше запрос ищет все названия фильмов, в которых есть код слова. Не имеет значения, находится ли «код» в начале, середине или конце заголовка. Если оно содержится в заголовке, оно будет рассмотрено.
Предположим, мы хотим найти фильмы, которые начинаются с a, b, c или d, за которыми следует любое количество других символов. Как бы нам этого добиться? Мы можем использовать регулярное выражение вместе с метасимволами для достижения желаемых результатов.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Выполнение приведенного выше сценария в MySQL верстак против myflixdb дает нам следующие результаты.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
6 | Angels and Demons | NULL | 2007 | 6 |
7 | Davinci Code | NULL | 2007 | 6 |
Давайте теперь внимательно посмотрим на наше регулярное выражение, отвечающее за приведенный выше результат.
'^[abcd]', каретка (^) означает, что соответствие шаблону должно применяться в начале, а список символов [abcd] означает, что в нашем наборе результатов возвращаются только названия фильмов, начинающиеся с a, b, c или d.
Давайте изменим приведенный выше сценарий и используем список символов NOT и посмотрим, какие результаты мы получим после выполнения нашего запроса.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Выполнение приведенного выше сценария в MySQL Workbench с myflixdb дает нам следующие результаты.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
3 | X-Men | 2008 | ||
9 | Honey mooners | John Schultz | 2005 | 8 |
16 | 67% Guilty | 2012 | ||
17 | The Great Dictator | Chalie Chaplie | 1920 | 7 |
18 | sample movie | Anonymous | 8 | |
19 | movie 3 | John Brown | 1920 | 8 |
Давайте теперь внимательно посмотрим на наше регулярное выражение, отвечающее за приведенные выше результаты.
'^[^abcd]', каретка (^) означает, что соответствие шаблону должно применяться в начале, а список символов [^abcd] означает, что названия фильмов, начинающиеся с любого из включенных символов, исключаются из набора результатов.
Метасимволы регулярных выражений
В приведенном выше примере мы рассмотрели простейшую форму регулярного выражения. Давайте теперь посмотрим на более сложные сопоставления шаблонов регулярных выражений. Предположим, мы хотим искать названия фильмов, начинающиеся с шаблона «код», только используя регулярное выражение. Как нам это сделать? Ответ — метасимволы. Они позволяют нам точно настраивать результаты поиска по шаблону с помощью регулярных выражений.
Голец | Описание | Пример | |
---|---|---|---|
* | Территория звездочка (*) метасимвол используется для сопоставления нуля (0) или более экземпляров строк, предшествующих ему. | ВЫБРАТЬ * ИЗ фильмов ГДЕ заголовок REGEXP 'da*'; выдаст все фильмы, содержащие символы «да». Например, «Код да Винчи», «Папины маленькие девочки». | |
+ | Территория плюс (+) метасимвол используется для сопоставления одного или нескольких экземпляров предшествующих ему строк. | SELECT * FROM `movies` WHERE `title` REGEXP 'mon+'; выдаст все фильмы, содержащие персонажей «мон». Например, «Ангелы и демоны». | |
? | Вопрос(?) метасимвол используется для сопоставления нуля (0) или одного экземпляра строк, предшествующих ему. | SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; выдаст все категории, содержащие строку com. Например, комедия, романтическая комедия. | |
. | Территория точка (.) метасимвол используется для соответствия любому отдельному символу, за исключением новой строки. | ВЫБРАТЬ * ИЗ фильмов ГДЕ `year_released` REGEXP '200.'; выдаст все фильмы, выпущенные за годы, начинающиеся с символов «200», за которыми следует любой отдельный символ. Например, 2005,2007,2008 и т. д. | |
[абв] | Территория список чарлистов [abc] используется для соответствия любому из включенных символов. | SELECT * FROM `movies` WHERE `title` REGEXP '[vwxyz]'; выдаст все фильмы, содержащие какой-либо один персонаж в «vwxyz». Например, «Люди Икс», «Код да Винчи» и т. д. | |
[^ abc] | Территория список символов [^abc] используется для сопоставления любых символов, кроме включенных. | SELECT * FROM `movies` WHERE `title` REGEXP '^[^vwxyz]'; выдаст все фильмы, содержащие персонажей, отличных от «vwxyz». | |
[AZ] | Территория [AZ] используется для соответствия любой заглавной букве. | SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; выдаст всем участникам, почтовый адрес которых содержит любые символы от А до Я. Например, Джанет Джонс с номером членства 1. | |
[аз] | Территория [аз] используется для соответствия любой строчной букве | SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; выдаст всем участникам, чьи почтовые адреса содержат любые символы от a до z. .Например, Джанет Джонс с номером участника 1. | |
[0-9] | Территория [0-9] используется для сопоставления любой цифры от 0 до 9. | ВЫБЕРИТЕ * FROM `members` WHERE `contact_number` REGEXP '[0-9]' предоставит всем участникам, представившим контактные номера, содержащие символы «[0-9]». Например, Роберт Фил. | |
^ | Территория каре (^) используется для начала матча с самого начала. | SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]'; дает все фильмы, название которых начинается с любого символа в «cd». Например, «Кодовое имя Черный», «Папины маленькие девочки» и «Код да Винчи». | |
| | Территория вертикальная черта (|) используется для выделения альтернатив. | SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]|^[u]'; дает все фильмы, название которых начинается с любого символа «cd» или «u». Например, «Кодовое имя Черный», «Папина маленькая девочка», «Код да Винчи» и «Другой мир» — AwakenIng. | |
[[: <:]] | Территория[[: <:]] соответствует началу слов. | SELECT * FROM `movies` WHERE `title` REGEXP '[[:<:]]for';
дает все фильмы, названия которых начинаются с персонажей. Например: забыть Сару Маршал. |
|
[[:>:]] | Территория [[:>:]] соответствует концу слова. | SELECT * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';
дает все фильмы, названия которых заканчиваются на символы «ack» .Например, кодовое имя Черный. |
|
[:сорт:] | Территория [:сорт:] соответствует классу символов, т.е.
[:альфа:] чтобы совпадать с буквами, [:космос:] чтобы соответствовать пустому пространству, [: punct:] соответствует знакам препинания и [:upper:] для букв высшего класса. |
SELECT * FROM `movies` WHERE `title` REGEXP '[:alpha:]';
дает все фильмы, названия которых содержат только буквы .Например, «Забыть Сару Маршал», «Людей Икс» и т. д. В этом запросе не будет учитываться такой фильм, как «Пираты Карибского моря 4». |
Обратная косая черта (\) используется в качестве escape-символа. Если мы хотим использовать его как часть шаблона в регулярном выражении, нам следует использовать двойную обратную косую черту (\\)
Резюме
- Регулярные выражения обеспечивают мощное и гибкое сопоставление с образцом, которое может помочь нам реализовать утилиты мощного поиска для наших систем баз данных.
- REGEXP — это оператор, используемый при сопоставлении шаблонов регулярных выражений. RLIKE – это синоним
- Регулярные выражения поддерживают ряд метасимволов, которые обеспечивают большую гибкость и контроль при выполнении сопоставлений с шаблонами.
- Обратная косая черта используется как escape-символ в регулярных выражениях. Он учитывается при сопоставлении с образцом только в том случае, если использовалась двойная обратная косая черта.
- Регулярные выражения не чувствительны к регистру.