Что такое регулярные выражения?
Регулярные выражения помогают искать данные, соответствующие сложным критериям. Мы рассмотрели подстановочные знаки в предыдущем уроке. Если вы раньше работали с подстановочными знаками, вы можете спросить, зачем изучать регулярные выражения, если вы можете получить аналогичные результаты, используя подстановочные знаки. Потому что, по сравнению с подстановочными знаками, регулярные выражения позволяют нам искать данные, соответствующие еще более сложному критерию.
Базовый синтаксис
Базовый синтаксис регулярного выражения выглядит следующим образом
SELECT statements… WHERE fieldname REGEXP 'pattern';
ЗДЕСЬ -
- «Операторы SELECT…» - это стандартный оператор SELECT.
- «WHERE fieldname» - это имя столбца, для которого должно выполняться регулярное выражение.
- "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 для 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] означает, что заголовки фильмов, начинающиеся с любого из заключенных символов, исключены из набора результатов.
Метасимволы регулярных выражений
В приведенном выше примере мы рассмотрели простейшую форму регулярного выражения. Давайте теперь посмотрим на более сложные совпадения шаблонов регулярных выражений. Предположим, мы хотим искать названия фильмов, которые начинаются с шаблона «код», только используя регулярное выражение, как бы мы это сделали? Ответ - метасимволы. Они позволяют нам точно настраивать результаты поиска по шаблонам с помощью регулярных выражений.
Char | Описание | Пример | |
---|---|---|---|
* | Звездочка (*) Метасимвол используется для сопоставления ноль (0) или более экземпляров строк , предшествующих его | ВЫБЕРИТЕ * ИЗ фильмов, ГДЕ название REGEXP 'da *'; выдаст все фильмы, содержащие символы «да». Например, «Код да Винчи», «Папины маленьких девочек». | |
+ | Метасимвол плюс (+) используется для сопоставления одного или нескольких экземпляров предшествующих ему строк. | ВЫБЕРИТЕ * ИЗ `movies` WHERE` title` REGEXP 'mon +'; выдаст всем фильмам, содержащим символы «пн». Например, Ангелы и Демоны. | |
? | Метасимвол вопроса (?) Используется для сопоставления нуля (0) или одного экземпляра строк, предшествующих ему. | ВЫБЕРИТЕ * ИЗ `категорий` ГДЕ` имя_категории` REGEXP 'com?'; выдаст все категории, содержащие строку com. Например, комедия, романтическая комедия. | |
. | Точка (.) Метасимвол используется для любого одиночного символа в исключении новой строки. | ВЫБРАТЬ * ИЗ фильмов ГДЕ `year_released` REGEXP '200.'; предоставит все фильмы, выпущенные за годы, начиная с символа "200", за которым следует любой отдельный символ. Например, 2005,2007,2008 и т. д. | |
[abc] | Список символов [abc] используется для сопоставления любого из заключенных символов. | ВЫБЕРИТЕ * ИЗ `movies` ГДЕ` title` REGEXP '[vwxyz]'; предоставит все фильмы, содержащие любой единственный символ в "vwxyz". Например, Люди Икс, Код да Винчи и т. д. | |
[abc] | Список символов [abc] используется для сопоставления любых символов, кроме заключенных. | ВЫБЕРИТЕ * ИЗ `movies` ГДЕ` title` REGEXP '[vwxyz]'; предоставит все фильмы, содержащие персонажей, кроме тех, что находятся в "vwxyz". | |
[AZ] | [AZ] используется , чтобы соответствовать любой заглавной букве. | ВЫБЕРИТЕ * FROM `members` WHERE` postal_address` REGEXP '[AZ]'; предоставит всем участникам, у которых есть почтовые адреса, содержащие любой символ от A до Z… Например, Джанет Джонс с номером участника 1. | |
[аз] | [Аз] используются , чтобы соответствовать любому строчной буквы | ВЫБЕРИТЕ * FROM `members` WHERE` postal_address` REGEXP '[az]'; предоставит всем участникам, у которых есть почтовые адреса, содержащие любые символы от a до z… Например, Джанет Джонс с номером участника 1. | |
[0-9] | [0-9] используется для сопоставления любой цифры от 0 до 9. | SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' предоставит всем участникам отправленные контактные номера, содержащие символы «[0-9]». Например, Роберт Фил. | |
^ | Каретка (^) используется , чтобы начать матч на начало. | ВЫБЕРИТЕ * ИЗ `movies` ГДЕ` title` REGEXP '[cd]'; дает все фильмы, название которых начинается с любого из символов в «cd». Например, «Черный код», «Папины маленьких девочек» и «Код да Винчи». | |
| | Вертикальная черта (|) используется для изолирования альтернатив. | ВЫБЕРИТЕ * ИЗ `movies` ГДЕ` title` REGEXP '[cd] | [u]'; дает все фильмы, название которых начинается с любого из символов в «cd» или «u». Например, «Черный код», «Папина маленькая девочка», «Код да Винчи» и «Другой мир - Пробуждение». | |
[[: <:]] | [[: <:]] Соответствует началу слова. | ВЫБЕРИТЕ * ИЗ `movies` ГДЕ` title` REGEXP '[[: <:]] для'; выдает все фильмы с названиями, начинающимися с персонажей. Например: забыть Сару Маршал. | |
[[:>:]] | [[:>:]] Соответствует концу слова. | ВЫБЕРИТЕ * ИЗ `movies` ГДЕ` title` REGEXP 'ack [[:>:]]'; выдает все фильмы с названиями, оканчивающимися на символы «ack». Например, кодовое имя Black. | |
[:учебный класс:] | [: Класс:] совпадает с классом символов , т.е. [: альфа:] , чтобы соответствовать письмам, [: пространство:] , чтобы соответствовать белому пространству, [пунктуатор] спичка пунктуацию и [: верхний:] для прописных букв класса. | ВЫБЕРИТЕ * ИЗ `movies` WHERE` title` REGEXP '[: alpha:]'; дает все фильмы, названия которых содержат только буквы. Например, «Забыть Сару Маршал», «Люди Икс» и т.д. |
Обратная косая черта (\) используется как escape-символ. Если мы хотим использовать его как часть шаблона в регулярном выражении, мы должны использовать двойную обратную косую черту (\\)
Резюме
- Регулярные выражения обеспечивают мощное и гибкое сопоставление с образцом, которое может помочь нам реализовать мощные поисковые утилиты для наших систем баз данных.
- REGEXP - это оператор, используемый при сопоставлении с шаблоном регулярного выражения. RLIKE - это синоним
- Регулярные выражения поддерживают ряд метасимволов, которые обеспечивают большую гибкость и контроль при выполнении сопоставления с образцом.
- Обратная косая черта используется как escape-символ в регулярных выражениях. Он учитывается при сопоставлении с шаблоном только в том случае, если используются двойные обратные косые черты.
- Регулярные выражения не чувствительны к регистру.