Регулярни изрази на MYSQL (REGEXP) със синтаксис & Примери

Anonim

Какво представляват регулярните изрази?

Регулярните изрази помагат за търсене на данни, отговарящи на сложни критерии. Разгледахме заместващи символи в предишния урок. Ако преди сте работили с заместващи символи, може би ще попитате защо да научите регулярни изрази, когато можете да получите подобни резултати, като използвате заместващите символи. Защото, в сравнение с заместващите символи, регулярните изрази ни позволяват да търсим данни, отговарящи на още по-сложен критерий.

Основен синтаксис

Основният синтаксис за регулярен израз е както следва

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 е синонимът
  • Регулярните изрази поддържат редица метасимволи, които позволяват по-голяма гъвкавост и контрол при изпълнение на съвпадения на шаблони.
  • Обратната наклонена черта се използва като изходен знак в регулярни изрази. При съвпадение на шаблона се взема предвид само ако са използвани двойни наклонени черти.
  • Регулярните изрази не са чувствителни към малки и големи букви.