Какво представляват регулярните изрази?
Регулярните изрази помагат за търсене на данни, отговарящи на сложни критерии. Разгледахме заместващи символи в предишния урок. Ако преди сте работили с заместващи символи, може би ще попитате защо да научите регулярни изрази, когато можете да получите подобни резултати, като използвате заместващите символи. Защото, в сравнение с заместващите символи, регулярните изрази ни позволяват да търсим данни, отговарящи на още по-сложен критерий.
Основен синтаксис
Основният синтаксис за регулярен израз е както следва
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 workbench срещу 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 *'; ще даде на всички филми, съдържащи символи "da". Например, кодът на Да Винчи, малките момиченца на Daddy's. | |
+ | На плюс (+) метасимволът се използва за да съответства на един или повече случаи на низове, които го предхождат. | ИЗБЕРЕТЕ * ОТ `филми` КЪДЕ` заглавие` REGEXP 'mon +'; ще даде на всички филми, съдържащи герои "mon" .Например, Angels and Demons. | |
? | Въпросният (?) Метасимвол се използва за съвпадение на нула (0) или един екземпляр на низовете, предшестващи го. | ИЗБЕРЕТЕ * ОТ `категории` КЪДЕ` име на категория` REGEXP 'com?'; ще даде всички категории, съдържащи низ com. Например, комедия, романтична комедия. | |
. | В точка (.) Метасимволът се използва за подбиране на всеки отделен знак в изключение на нов ред. | ИЗБЕРЕТЕ * ОТ филми КЪДЕ `година_издадена` REGEXP '200.'; ще даде всички филми, издадени през годините, започвайки със знаци "200", последвани от всеки отделен знак. Например, 2005,2007,2008 и т.н. | |
[abc] | В charlist [ABC] се използва за съвпадна с нито един от приложените героите. | ИЗБЕРЕТЕ * ОТ `филми` КЪДЕ` заглавие` REGEXP '[vwxyz]'; ще даде на всички филми, съдържащи който и да е един знак в "vwxyz". Например, X-Men, Da Vinci Code и др. | |
[abc] | В charlist [ABC] се използва за съвпадна с никакви символи, с изключение на тези, затворени. | ИЗБЕРЕТЕ * ОТ `филми` КЪДЕ` заглавие` 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 ... Например, Janet Jones с членски номер 1. | |
[0-9] | В [0-9] се използва за да съответства всяка цифра от 0 до 9. | SELECT * 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". Например, Code Name Black, Daddy's Little Girl, Da Vinci Code и Underworld - Awakening. | |
[[: <:]] | [[: <:]] Съответства на началото на думите. | SELECT * FROM `movies` WHERE` title` REGEXP '[[: <:]] за'; дава всички филми със заглавия, започвайки с героите. Например: Забравянето на Сара Маршал. | |
[[:>:]] | [[:>:]] Съответства на края на думите. | ИЗБЕРЕТЕ * ОТ `филми` КЪДЕ` заглавие` REGEXP 'ack [[:>:]]'; дава всички филми със заглавия, завършващи със знаци "ack". Например, Code Name Black. | |
[: клас:] | В [: класа:] съответства на клас характер т.е. [: алфа:], за да съответстват на писма, [: пространство:], за да съответстват на празно пространство, [: punct:] е много препинателни знаци мач и [: горна:] за горните букви класа. | ИЗБЕРЕТЕ * ОТ `филми` КЪДЕ` заглавие` REGEXP '[: alpha:]'; дава всички филми със заглавия да съдържат само букви. Например, Забравяйки Сара Маршал, X-Men и т.н. Филм като „Карибски пирати 4“ ще бъде пропуснат от тази заявка. |
Обратната наклонена черта (\) се използва като изходен знак. Ако искаме да го използваме като част от шаблона в регулярен израз, трябва да използваме двойни наклонени черти (\\)
Обобщение
- Регулярните изрази осигуряват мощно и гъвкаво съвпадение на модела, което може да ни помогне да внедрим помощни програми за търсене на енергия за нашите системи от бази данни.
- REGEXP е операторът, използван при извършване на съвпадения на шаблони на регулярни изрази. RLIKE е синонимът
- Регулярните изрази поддържат редица метасимволи, които позволяват по-голяма гъвкавост и контрол при изпълнение на съвпадения на шаблони.
- Обратната наклонена черта се използва като изходен знак в регулярни изрази. При съвпадение на шаблона се взема предвид само ако са използвани двойни наклонени черти.
- Регулярните изрази не са чувствителни към малки и големи букви.