Регулярни изрази (с примери) - 1

„И сега ще ви разкажа за регулярните изрази. Тази тема е едновременно сложна и проста. За да разберете напълно регулярните изрази, може да се наложи да прочетете две or три тежки книги, но мога да ви науча How да ги използвате точно сега."

„Както опитните програмисти обичат да се шегуват, ако имате проблем и мислите, че ще го разрешите с регулярни изрази, сега имате два проблема.“

— Хм.

„Надявам се, че не те изплаших твърде много, приятелю. Нали?“

„Добре, добре. И така, новата ни тема са регулярните изрази.“

„Ако ги опростим твърде много, регулярните изрази са модели за низове.“

"Можете да проверите дали даден низ съответства на даден шаблон. Можете също така да разделите низ на части, като използвате разделител or шаблон."

„Но нека започнем с нещо просто: Howво е модел?

"В SQL (но не и в Java) можете да проверите дали даден низ съответства на конкретен модел. Ето How изглежда:"

name like 'Alex%'

Тук name е променлива, като е команда за проверка на шаблон, а "Alex%" е шаблонът.

В този случай % означава всеки низ or подниз.

модел Струни, съответстващи на модела
„Алекс %“ Алекс
Алекс и
Алекс и
Алекс Андра
….
'%х%' Ma x
Ma x im
Ale x andr
„%a“ Олг и
Хелън и
Ир и

"В SQL, ако трябва да посочите, че трябва да има само един друг знак, тогава ще използвате знака за долна черта: "_"."

модел Струни, съответстващи на модела
„Алекс%_“ Алекс
Алекс и
Алекс и
Алекс Андра
….
'_х' Ax
Bx
Cx
'___' Ааа
Ааб
Ббб

— Това има смисъл.

„Добре, тогава да преминем към регулярните изрази.“

"Регулярните изрази обикновено включват ограничение не само върху броя на знаците, но и на тяхното "съдържание". "Всяка маска обикновено се състои от две (понякога повече) части: първата описва "предпочитанията" на символа, а втората описва броя на знаците ."

„Ето някои примери за съдържание :“

модел Описание Примери
. Всеки един знак 1
Всяка цифра 7
Всички нецифрени ° С
Знак за интервал, нов ред or табулатор ' '
Всичко освен интервали, раздели и нови редове f
[az] Всяка буква от a до z z
[0-9] Всяка цифра от 0 до 9. 8
\w Всяка дума ° С
\W Всеки несловен знак _

„Няма да ги запомня веднага, но не изглежда много трудно.“

"Отлично, тогава ето примери за броя знаци в маска: "

модел Описание Примери
А? Символът "A" се среща веднъж or изобщо не се среща А
B+ Символът "B" се среща един or повече пъти BBBB
° С* Символът 'C' се среща нула or повече пъти CCC
д{н} Знакът 'D' се среща n пъти Образецът D{4} съответства на DDDD
E{n,} Символът „E“ се среща n or повече пъти Моделът E{2,} съвпада с EEEEEEE
F{n,m} Символът „F“ се среща между n и m пъти Моделът E{2,4} съответства на EEEE

— Всичко това изглежда доста просто.

„Толкова бързо схващаш всичко. Сега да видим How изглежда всичко заедно:“

модел Описание Примери
[реклама]? Знак между "a" и "d" се среща веднъж or изобщо не се среща a, b, c, d
[bd,z]+ Знаците "b", "c", "d" or "z" се срещат един or повече пъти b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[1,7-9]* Цифрите 1, 7, 8 or 9 се срещат нула or повече пъти 1, 7, 9, 9777, 111199
1{5} Цифрата 1 се среща 5 пъти 11111
[1,2,a,b]{2} Символите 1, 2, 'a' or 'b' се срещат два пъти 11, 12, 1a, ab, 2b, bb, 22
[a,0]{2,3} Символите 'a' or 0 се срещат 2 or 3 пъти aa, a0,00,0a, aaa,000, a00,0a0, a0a

— Все още всичко е ясно.

„Наистина ли? Хм. Или съм обяснил всичко много добре, or си твърде бърз с възприемането. Е, така or иначе, това е добре за нас.“

„Ето няколко нови прозрения за вас.“

„Тъй като регулярните изрази често се използват за намиране на поднизове, можем да добавим още два знака (^ и $) към нашите модели.“

"^ означава, че поднизът трябва да включва началото на низа."

"$ означава, че поднизът трябва да включва края на низа."

"Ето няколко примера:"

модел Низ и поднизове, които съответстват на шаблона
а{3} ааа  а  ааа  ааа  _
{3}$ ааа а ааа  ааа
^a{3} ааа  а ааа ааа
^a{3}$ ааа а ааа ааа

— И още един важен момент.

"В регулярните изрази следните знаци имат специално meaning: [ ] \ / ^ $ . | ? * + ( ) { }. Те се наричат ​​контролни знаци. Така че не можете просто да ги използвате в низове."

"Както в codeа на Java, те трябва да бъдат екранирани. "И отново, Howто в codeа на Java, символът '\' се използва за това.

„Ако искаме да опишем низ, състоящ се от три „?“ знаци, не можем да напишем '?{3}', защото '?' е контролен знак. Трябва да го направим така: \?{3}. Ако искаме да използваме знак '\', тогава трябва да напишем '\\'."

"Добре, разбрах."

„А сега ето още един интересен момент. Във файлове с Java code, символът „\“ също трябва да бъде екраниран в низове, тъй като е контролен знак.“

"Разбира се."

„Така че, ако се опитвате да дефинирате регулярен израз на Java в низ, тогава трябва да екранирате знака „\“ два пъти.“

"Ето един пример:"

Искам маска, която съответства на 'c:\anything'
На теория регулярният израз трябва да изглежда така:
един знак „c“,
двоеточие,
обратна наклонена черта,
точка и звездичка (за обозначаване на произволен брой знаци). Добавих интервали, за да подобря четливостта:
c : \ .*
Но знаците '\' и '.' трябва да бъдат екранирани, така че регулярният израз ще изглежда така:
c :   \\ \. *
Или без интервали
c: \\ \. *
"Трябва да имаме три обратни наклонени черти в нашия регулярен израз.
Това означава, че в Java файл регулярният израз ще изглежда така:"
String regexp = "c: \\\\ \\. *";

"Уау! Уау. Сега знам."

„И ако решите да се задълбочите в това, ето няколко добри връзки:“

Урок по Уикипедия