В MySQL, REGEXP
Операторът се използва за определяне дали низ съответства на регулярен израз или не. Това е синоним на REGEXP_LIKE()
.
Ако низът съвпада с предоставения регулярен израз, резултатът е 1
, в противен случай е 0
.
Синтаксис
Синтаксисът е така:
expr REGEXP поглаждане
Където expr
е входният низ и pat
е регулярният израз, срещу който тествате низа.
Пример 1 – Основен регулярен израз
Най-основният регулярен израз, който можем да използваме, е този, който няма специални знаци в него. Тук ние просто използваме низ. Ако някоя част от входния низ съвпада с този низ, тя връща съвпадение.
ИЗБЕРЕТЕ 'Царевевица' REGEXP 'Царевицата' КАТО 'Царевицата', 'Жълъд' REGEXP 'Царевицата' КАТО 'Жълъд', 'Ъгъл' REGEXP 'Царевицата' КАТО 'Ъгъл', 'Сирене' REGEXP 'Царевицата' КАТО 'Сирене ';
Резултат:
+------+-------+-------+-------+| Царевица | Жълъд | Ъгъл | Сирене |+------+-------+-------+-------+| 1 | 1 | 1 | 0 |+-----+-------+-------+-------+
Пример 2 – Съпоставяне на началото на низ
В този пример регулярният израз указва, че низът трябва да започва с Co
.
ИЗБЕРЕТЕ 'Corn' REGEXP '^Co' КАТО 'царевица', 'Acorn' REGEXP '^Co' КАТО 'Acorn', 'Cheese' REGEXP '^Co' КАТО 'Cheese';
Резултат:
+------+-------+-------+| Царевица | Жълъд | Сирене |+------+-------+-------+| 1 | 0 | 0 |+-----+-------+-------+
Пример 3 – Съпоставяне на края на низ
В този пример регулярният израз указва, че низът трябва да завършва с rn
.
ИЗБЕРЕТЕ 'Corn' REGEXP 'rn$' КАТО 'Corn', 'Acorn' REGEXP 'rn$' КАТО 'Acorn', 'Cheese' REGEXP 'rn$' КАТО 'Cheese';
Резултат:
+------+-------+-------+| Царевица | Жълъд | Сирене |+------+-------+-------+| 1 | 1 | 0 |+-----+-------+-------+
Пример 4 – Съвпадение на всеки знак
.
знак съответства на всеки знак.
ИЗБЕРЕТЕ 'Царевичен' REGEXP '.' КАТО „царевица“, „сирене“ REGEXP „.“ КАТО 'Cheese', '' REGEXP '.' AS '';
Резултат:
+------+-------+---+| Царевица | Сирене | |+-----+--------+---+| 1 | 1 | 0 |+------+--------+---+
Този знак обикновено се използва заедно с други знаци за определяне на допълнителни критерии. Например:
ИЗБЕРЕТЕ 'Corn' REGEXP '^C.rn$' КАТО 'Царевичка', 'Crn' REGEXP '^C.rn$' КАТО 'Crn';
Резултат:
+------+-----+| Царевица | Crn |+------+-----+| 1 | 0 |+------+-----+
Тук указваме, че низът трябва да започва с C
, че трябва да бъде последван от знак (всякакъв знак) и че трябва да завършва с rn
.
Имайте предвид, че този знак указва един екземпляр на знака. Ако искате да посочите няколко екземпляра (например ee
вместо само e
), ще трябва да добавите още .
знаци.
ИЗБЕРЕТЕ 'Tweet' REGEXP '^Tw..t$' КАТО 'Tweet', 'Tweat' REGEXP '^Tw..t$' КАТО 'Tweat', 'Tweet' REGEXP '^Tw.t$' AS 'Twit', 'Twit' REGEXP '^Tw..t$' КАТО 'Twit';
Резултат:
+-------+-------+-------+-----+| Tweet | Tweat | Tweet | Туит |+-------+-------+-------+-----+| 1 | 1 | 0 | 0 |+-------+-------+-------+-----+
Друг начин да направите това е да посочите броя на събитията в къдрави скоби:
ИЗБЕРЕТЕ 'Tweet' REGEXP '^Tw.{2}t$' КАТО 'Tweet', 'Tweat' REGEXP '^Tw.{2}t$' КАТО 'Tweat', 'Tweet' REGEXP '^Tw. {1}t$' AS 'Twit', 'Twit' REGEXP '^Tw.{2}t$' AS 'Twit';
Резултат:
+-------+-------+-------+-----+| Tweet | Tweat | Tweet | Туит |+-------+-------+-------+-----+| 1 | 1 | 0 | 0 |+-------+-------+-------+-----+
Ако обаче знаете знака, който търсите, можете да посочите този знак (вместо .
). символ), както е показано в следващия пример.
Пример 5 – Съвпадение на нула или повече екземпляри на конкретен символ
Можем да направим следното, за да посочим нула или повече екземпляри на e
знак:
ИЗБЕРЕТЕ 'Twet' REGEXP '^Twe*t$' КАТО 'Twet', 'Tweet' REGEXP '^Twe*t$' КАТО 'Tweet', 'Tweeet' REGEXP '^Twe*t$' КАТО 'Tweeet ', 'Twt' REGEXP '^Twe*t$' КАТО 'Twt', 'Twit' REGEXP '^Twe*t$' КАТО 'Twit', 'Twiet' REGEXP '^Twe*t$' КАТО 'Twiet', 'Tweit' REGEXP '^Twe*t$' КАТО 'Tweit';
Резултат:
+------+-------+-------+-----+-----+-------+- ------+| Туит | Tweet | Туит | Twt | Туит | Туит | Туит |+------+-------+-------+-----+------+-------+-- -----+| 1 | 1 | 1 | 1 | 0 | 0 | 0 |+------+-------+-------+-----+-----+-------+-- -----+
Първите четири съвпадат, но последните три не.
Пример 6 – Съпоставяне на един или повече екземпляри на конкретен символ
Можем да модифицираме предишния пример, така че да получим съвпадение само ако едно или са намерени повече символи (предишният пример върна съвпадение, ако нула или повече са открити). За да направите това, ние просто използваме +
вместо *
:
ИЗБЕРЕТЕ 'Twet' REGEXP '^Twe+t$' КАТО 'Twet', 'Tweet' REGEXP '^Twe+t$' КАТО 'Tweet', 'Tweeet' REGEXP '^Twe+t$' КАТО 'Tweet ', 'Twt' REGEXP '^Twe+t$' КАТО 'Twt', 'Twit' REGEXP '^Twe+t$' КАТО 'Twit', 'Twiet' REGEXP '^Twe+t$' КАТО 'Twiet', 'Tweit' REGEXP '^Twe+t$' КАТО 'Tweit';
Резултат:
+------+-------+-------+-----+-----+-------+- ------+| Туит | Tweet | Туит | Twt | Туит | Туит | Туит |+------+-------+-------+-----+------+-------+-- -----+| 1 | 1 | 1 | 0 | 0 | 0 | 0 |+------+-------+-------+-----+-----+-------+-- -----+
В този случай четвъртата дума връща различен резултат от предишния пример.
Пример 7 – Съвпадение на нула или един екземпляр на конкретен символ
Можем да модифицираме предишния пример, така че да получим съвпадение само на нула или един от желаните знаци. За да направим това, използваме ?
:
ИЗБЕРЕТЕ 'Twet' REGEXP '^Twe?t$' КАТО 'Twet', 'Tweet' REGEXP '^Twe?t$' КАТО 'Tweet', 'Tweeet' REGEXP '^Twe?t$' КАТО 'Tweeet ', 'Twt' REGEXP '^Twe?t$' КАТО 'Twt', 'Twit' REGEXP '^Twe?t$' КАТО 'Twit', 'Twiet' REGEXP '^Twe?t$' КАТО 'Twiet', 'Tweit' REGEXP '^Twe?t$' КАТО 'Tweit';
Резултат:
+------+-------+-------+-----+-----+-------+- ------+| Туит | Tweet | Туит | Twt | Туит | Туит | Туит |+------+-------+-------+-----+------+-------+-- -----+| 1 | 0 | 0 | 1 | 0 | 0 | 0 |+------+-------+-------+-----+-----+-------+-- -----+
Пример 8 – Редуване
Можете да използвате |
знак, за да съответства на една или друга последователност от знаци:
ИЗБЕРЕТЕ 'Tweet' REGEXP 'Tw|et' КАТО 'Tweet', 'For Let' REGEXP 'Tw|et' КАТО 'For Let', 'Banana' REGEXP 'Tw|et' КАТО 'Banana';предварително>Резултат:
<пред>+-------+--------+-------+| Tweet | За Нека | Банан |+-------+--------+-------+| 1 | 1 | 0 |+-------+--------+-------+
Ето още един пример, в който търся цели думи:
ИЗБЕРЕТЕ 'Cat' REGEXP 'Cat|Dog' КАТО 'Cat', 'Dog' REGEXP 'Cat|Dog' КАТО 'Dog', 'Doggone' REGEXP 'Cat|Dog' КАТО 'Doggone', 'Banana' REGEXP „Котка|Куче“ КАТО „Банан“;
Резултат:
+-----+-----+--------+-------+| Котка | Куче | Doggone | Банан |+-----+-----+--------+-------+| 1 | 1 | 1 | 0 |+-----+-----+--------+-------+
Все още получаваме съвпадение, дори когато нашият регулярен израз съвпада само с част от низа.
Пример 9 – Съвпадение на нула или повече екземпляри на последователност
Можете да използвате скоби заедно със звездичката ()*
за да посочите нула или повече екземпляри на последователност:
ИЗБЕРЕТЕ „Banana“ REGEXP „(an)*“ КАТО „Banana“, „Land“ REGEXP „(an)*“ КАТО „Земя“, „Cheese“ REGEXP „(an)*“ КАТО „Cheese“;предварително>Резултат:
<пред>+--------+------+-------+| Банан | Земя | Сирене |+--------+-----+-------+| 1 | 1 | 1 |+-------+------+-------+
Друг пример:
ИЗБЕРЕТЕ 'Banana' REGEXP '^B(an)*d$' КАТО 'Banana', 'Band' REGEXP '^B(an)*d$' КАТО 'Band', 'Bald' REGEXP '^B( an)*d$' AS 'Плешив', 'Лош' REGEXP '^B(an)*d$' AS 'Лош';
Резултат:
+--------+------+------+-----+| Банан | Банда | Плешив | Лошо |+--------+------+------+-----+| 0 | 1 | 0 | 0 |+-------+------+------+-----+
Пример 10 – Повторение
Както се вижда в предишен пример, можете да използвате къдрави скоби, за да посочите повторение. Тази нотация предоставя по-общ начин за писане на регулярни изрази от някои от предишните примери:
ИЗБЕРЕТЕ 'Tweeet' REGEXP 'e{3}' КАТО 'Tweeet', 'Tweet' REGEXP 'e{3}' КАТО 'Tweet';
Резултат:
<пред>+--------+-------+| Туит | Tweet |+--------+-------+| 1 | 0 |+-------+-------+Пример 11 – Обхват
Можете да използвате знака за тире, за да посочите диапазон. Ето пример, който определя диапазон от числа:
ИЗБЕРЕТЕ 'Tweet 123' REGEXP '[0-9]' КАТО 'Tweet 123', 'Tweet ABC' REGEXP '[0-9]' КАТО 'Tweet ABC';
Резултат:
<пред>+--------+-------+| Туит | Tweet |+--------+-------+| 1 | 0 |+-------+-------+И следният пример определя диапазон от букви:
ИЗБЕРЕТЕ 'Tweet 123' REGEXP '[A-Z]' КАТО 'Tweet 123', 'ABC' REGEXP '[A-Z]' КАТО 'ABC', '123' REGEXP '[A-Z]') КАТО '123';предварително>Резултат:
<пред>+--------+-------+| Туит | Tweet |+--------+-------+| 1 | 0 |+-------+-------+
Ето какво се случва, ако ограничим диапазона от числа:
ИЗБЕРЕТЕ '123' REGEXP '[1-3]' КАТО '123', '012' REGEXP '[1-3]' КАТО '012', '045' REGEXP '[1-3]' КАТО '045) ';
Резултат:
+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 1 | 1 | 0 |+-----+-----+-----+
Пример 12 – Не е в обхват
Можем да използваме ^
символ, за да промените предишния пример, така че посоченият диапазон от знаци да бъде изключен:
ИЗБЕРЕТЕ '123' REGEXP '[^1-3]' КАТО '123', '012' REGEXP '[^1-3]' КАТО '012', '045' REGEXP '[^1-3])' КАТО '045';
Резултат:
+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 0 | 1 | 1 |+-----+-----+-----+
Така получаваме обратния резултат от предишния пример.