Регулярні вирази MYSQL (REGEXP) із синтаксисом і прикладами
Що таке регулярні вирази?
Регулярні вирази допомагають шукати дані, що відповідають складним критеріям. Ми розглянули символи підстановки в попередньому посібнику. Якщо ви раніше працювали із символами узагальнення, ви можете запитати, навіщо вивчати регулярні вирази, якщо ви можете отримати подібні результати, використовуючи символи узагальнення. Оскільки, порівняно зі символами узагальнення, регулярні вирази дозволяють нам шукати дані, що відповідають навіть більш складним критеріям.
Основний синтаксис
Основний синтаксис регулярного виразу такий
SELECT statements... WHERE fieldname REGEXP 'pattern';
ТУТ –
- «ВИБЕРІТЬ оператори…» є стандартом Оператор SELECT
- "WHERE ім'я поля" це ім'я стовпця, для якого буде виконано регулярний вираз.
- «Шаблон REGEXP» REGEXP — це оператор регулярного виразу, а «шаблон» представляє шаблон, який має відповідати REGEXP. RLIKE є синонім REGEXP і досягає тих же результатів, що й REGEXP. Щоб не плутати його з оператором LIKE, it краще використовувати REGEXP замість цього.
Тепер розглянемо практичний приклад -
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Наведений вище запит шукає всі назви фільмів, які містять слово 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 charlist і подивимось, які результати ми отримаємо після виконання нашого запиту.
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) або більше примірникам рядків, які йому передують | SELECT * FROM movies WHERE title REGEXP 'da*'; надасть усі фільми, які містять символи «da». Наприклад, «Код да Вінчі», «Татові дівчатка». | |
+ | Команда плюс (+) метасимвол використовується для відповідності одному або декільком примірникам рядків, які йому передують. | SELECT * FROM `files` WHERE `title` REGEXP 'mon+'; надасть усі фільми, які містять символи "mon". Наприклад, Ангели та Демони. | |
? | Питання(?) метасимвол використовується для відповідності нулю (0) або одному екземпляру рядків, які йому передують. | SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; надасть усі категорії, що містять рядок com. Наприклад, комедія, романтична комедія. | |
. | Команда крапка (.) метасимвол використовується для відповідності будь-якому окремому символу, за винятком нового рядка. | SELECT * FROM movies WHERE `year_released` REGEXP '200.'; надасть усі фільми, випущені за роки, починаючи з символів «200», за якими йде будь-який окремий символ. Наприклад, 2005,2007,2008, XNUMX, XNUMX тощо. | |
[abc] | Команда charlist [abc] використовується для відповідності будь-якому із символів усередині. | SELECT * FROM `files` WHERE `title` REGEXP '[vwxyz]'; надасть усі фільми, які містять будь-якого окремого персонажа у «vwxyz». Наприклад, «Люди Ікс», «Код да Вінчі» тощо. | |
[^abc] | Команда charlist [^abc] використовується для відповідності будь-яким символам, за винятком тих, що входять у рамки. | SELECT * FROM `files` WHERE `title` REGEXP '^[^vwxyz]'; надасть усі фільми, які містять символи, відмінні від символів у «vwxyz». | |
[AZ] | Команда [AZ] використовується для відповідності будь-якій великій літері. | SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; надасть усім учасникам, які мають поштову адресу, що містить будь-які символи від А до Я. Наприклад, Джанет Джонс із членським номером 1. | |
[az] | Команда [az] використовується для відповідності будь-якій малий регістр | SELECT * 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]». Наприклад, Роберт Філ. | |
^ | Команда вставка (^) використовується для початку матчу. | SELECT * FROM `files` WHERE `title` REGEXP '^[cd]'; надає всі фільми, назва яких починається з будь-якого символу в «cd». Наприклад, «Кодова назва Блек», «Татові маленькі дівчатка» та «Код да Вінчі». | |
| | Команда вертикальна смуга (|) використовується для виділення альтернатив. | SELECT * FROM `files` WHERE `title` REGEXP '^[cd]|^[u]'; надає всі фільми, назва яких починається з будь-якого символу в «cd» або «u». Наприклад, кодове ім’я «Блек», «Татова дівчинка», «Код да Вінчі» та «Інший світ» – AwakenIng. | |
[[:<:]] | Команда[[:<:]] відповідає початку слів. | SELECT * FROM `files` WHERE `title` REGEXP '[[:<:]]for';
надає всі фільми, назви яких починаються з персонажів. Наприклад: «Забути Сару Маршал». |
|
[[:>:]] | Команда [[:>:]] відповідає закінченню слів. | SELECT * FROM `files` WHERE `title` REGEXP 'ack[[:>:]]';
надає всі фільми з назвами, що закінчуються символами «ack» .Наприклад, Кодове ім'я Чорний. |
|
[:клас:] | Команда [:клас:] відповідає класу символів, тобто
[:альфа:] зіставляти літери, [:пробіл:] щоб відповідати пробілу, [:punct:] це відповідні знаки пунктуації та [:upper:] для літер верхнього класу. |
SELECT * FROM `files` WHERE `title` REGEXP '[:alpha:]';
дає всі фільми, назви яких містять лише літери .Наприклад, «Забути Сару Маршал», «Люди Ікс» тощо. Цей запит пропускатиме такі фільми, як «Пірати Карибського моря 4». |
Зворотна скісна риска (\) використовується як контрольний символ. Якщо ми хочемо використовувати його як частину шаблону в регулярному виразі, ми повинні використовувати подвійні зворотні косі риски (\\)
Підсумки
- Регулярні вирази забезпечують потужне та гнучке зіставлення шаблонів, що може допомогти нам реалізувати потужні утиліти пошуку для наших систем баз даних.
- REGEXP — це оператор, який використовується під час виконання збігів шаблону регулярного виразу. RLIKE — це синонім
- Регулярні вирази підтримують ряд метасимволів, що забезпечує більшу гнучкість і контроль під час виконання збігів шаблонів.
- Зворотний слеш використовується як екранований символ у регулярних виразах. Це враховується лише у випадку збігу шаблону, якщо використано подвійні зворотні косі риски.
- Регулярні вирази не чутливі до регістру.