Що таке регулярні вирази?
Регулярні вирази допомагають шукати дані, що відповідають складним критеріям. Ми розглядали символи узагальнення у попередньому підручнику. Якщо ви вже працювали з узагальнюючими знаками, можливо, ви запитаєте, чому вивчати регулярні вирази, коли ви можете отримати подібні результати за допомогою підстановних знаків. Тому що, порівняно із символами підстановки, регулярні вирази дозволяють нам шукати дані, що відповідають ще більш складним критеріям.
Основний синтаксис
Основний синтаксис регулярного виразу такий:
SELECT statements… WHERE fieldname REGEXP 'pattern';
ТУТ -
- "Оператори SELECT ..." - це стандартний оператор SELECT
- "WHERE fieldname" - це назва стовпця, над яким слід виконувати регулярний вираз.
- "REGEXP 'pattern'" REGEXP є оператором регулярних виразів, а 'pattern' являє собою шаблон, який повинен відповідати 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] означає, що назви фільмів, що починаються з будь-якого із вкладених символів, виключаються із набору результатів.
Метасимволи регулярних виразів
Те, що ми розглядали у наведеному вище прикладі, це найпростіша форма регулярного виразу. Давайте тепер розглянемо більш досконалі збіги шаблонів регулярних виразів. Припустимо, ми хочемо шукати назви фільмів, які починаються з шаблону "код", лише використовуючи регулярний вираз, як би ми це зробили? Відповідь - метасимволи. Вони дозволяють нам точно налаштувати результати пошуку за шаблонами за допомогою регулярних виразів.
Чар | Опис | Приклад | |
---|---|---|---|
* | Зірочка (*) Метасимвол використовується для зіставлення нуль (0) або більше примірників рядків , що передують його | ВИБЕРІТЬ * ІЗ фільмів, ДЕ заголовок REGEXP 'da *'; буде давати всі фільми, що містять персонажів "da". Наприклад, "Код Да Вінчі", "Daddy's Little Girls" | |
+ | Плюс (+) Метасимвол використовується , щоб відповідати один або більше примірників рядків попередніх йому. | ВИБЕРІТЬ * З `фільмів` ДЕ` назва` REGEXP 'пон +'; буде давати всі фільми, що містять персонажів, "mon" .Наприклад, Angels and Demons. | |
? | Метасимвол запитання (?) Використовується для відповідності нулю (0) або одному екземпляру рядків, що передують йому. | ВИБЕРІТЬ * З `категорій` ДЕ` назва_категорії` REGEXP 'com?'; дасть усі категорії, що містять рядок com. Наприклад, комедія, романтична комедія. | |
. | Точка (.) Метасимвол використовується для будь-якого одиночного символу у виключенні нового рядка. | ВИБЕРІТЬ * З фільмів, ДЕ `рік_вийшов` REGEXP '200.'; буде подано всі фільми, випущені в роки, починаючи з символів "200", а потім будь-якого окремого персонажа. Наприклад, 2005,2007,2008 тощо. | |
[abc] | Список символів [abc] використовується для відповідності будь-якому із вкладених символів. | ВИБЕРІТЬ * З `фільмів` ДЕ` назва` REGEXP '[vwxyz]'; дасть всі фільми, що містять будь-якого окремого персонажа у "vwxyz". Наприклад, Люди Ікс, Код Да Вінчі тощо. | |
[abc] | Список символів [abc] використовується для зіставлення будь-яких символів, крім вкладених. | ВИБЕРІТЬ * З `фільмів` ДЕ` назва` REGEXP '[vwxyz]'; дасть всі фільми, що містять символи, крім тих, що містяться у "vwxyz". | |
[AZ] | [AZ] використовується , щоб відповідати будь-який великої букви. | ВИБЕРІТЬ * З `членів`, ДЕ` поштова_адреса` REGEXP '[AZ]'; дасть всім членам, які мають поштову адресу, що містить будь-який символ від А до Я ... Наприклад, Джанет Джонс із номером членства 1. | |
[az] | [Аз] використовуються , щоб відповідати будь-якому малої літери | ВИБЕРІТЬ * З `членів` ДЕ, де` поштова_адреса` REGEXP '[az]'; дасть всім членам, які мають поштові адреси, що містять будь-які символи від a до z ... Наприклад, Джанет Джонс із номером членства 1. | |
[0-9] | [0-9] використовується для зіставлення будь-цифри від 0 до 9. | ВИБЕРІТЬ * FROM `members` WHERE` contact_number` REGEXP '[0-9]' дасть всім учасникам подані контактні номери, що містять символи "[0-9]". Наприклад, Роберт Філ. | |
^ | Каретка (^) використовується , щоб почати матч на початок. | ВИБЕРІТЬ * З `фільмів` ДЕ` назва` REGEXP '[cd]'; дає всі фільми з заголовком, що починається з будь-якого з символів "cd". Наприклад, Code Name Black, Daddy's Little Girls та Da Vinci Code. | |
| | Вертикальна риса (|) використовується для ізолювання альтернатив. | ВИБЕРІТЬ * З `фільмів` ДЕ` назва` REGEXP '[cd] | [u]'; дає всі фільми з заголовком, що починається з будь-якого з символів "cd" або "u". Наприклад, Кодове ім'я Чорний, Татусева дівчинка, Код Да Вінчі та Підземний світ - Пробудження | |
[[: <:]] | [[: <:]] Збігається з початком слів. | ВИБЕРІТЬ * З `фільмів` ДЕ` назва` REGEXP '[[: <:]] для'; дає всі фільми з назвами, що починаються з героїв. Наприклад: Забуття Сари Маршал. | |
[[:>:]] | [[:>:]] Відповідає кінця слів. | ВИБЕРІТЬ * З `фільмів`, ДЕ` назва` REGEXP 'ack [[:>:]]'; дає всі фільми з назвами, що закінчуються символами "ack". Наприклад, Кодова назва Чорний. | |
[: клас:] | [: Клас:] збігається з класом символів , тобто [: альфа:] , щоб відповідати листів, [: простір:] , щоб відповідати білому простору, [пунктуатор] сірник пунктуацію і [: верхній:] для великих літер класу. | ВИБЕРІТЬ * З `фільмів` ДЕ` назва` REGEXP '[: alpha:]'; дає всі фільми з заголовками, що містять лише літери. Наприклад, Забуття Сари Маршал, Люди Ікс тощо. Цей фільм, як "Пірати Карибського моря 4", буде опущений за цим запитом. |
Зворотна коса риса (\) використовується як символ виходу. Якщо ми хочемо використовувати його як частину шаблону в регулярному виразі, слід використовувати подвійні зворотні скісні риски (\\)
Резюме
- Регулярні вирази забезпечують потужну та гнучку відповідність шаблону, яка може допомогти нам застосувати утиліти пошуку потужності для наших систем баз даних.
- REGEXP - це оператор, який використовується при виконанні збігів шаблонів регулярних виразів. RLIKE - це синонім
- Регулярні вирази підтримують ряд метасимволів, що дозволяють забезпечити більшу гнучкість та контроль під час виконання збігів шаблонів.
- Зворотна коса риса використовується як символ втечі в регулярних виразах. У збігу зразків це враховується лише в тому випадку, якщо використовували подвійні зворотні скісні риски.
- Регулярні вирази не чутливі до регістру.