Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Php preg numrat e ndeshjes. PHP (regex) - çfarë është? Shembuj të shprehjeve të rregullta dhe vërtetimi

Kur punojnë me tekste në çdo gjuhë programimi moderne, zhvilluesit përballen vazhdimisht me detyrat e kontrollit të të dhënave të futura për përputhjen me modelin e dëshiruar, gjetjen dhe zëvendësimin e fragmenteve të testit dhe operacioneve të tjera tipike për përpunimin e informacionit simbolik. Zhvillimi i algoritmeve tuaja të verifikimit çon në një humbje kohe, papajtueshmëri të kodit të programit dhe kompleksitet në zhvillimin dhe modernizimin e tij.

Zhvillimi i shpejtë i Internetit dhe i gjuhëve të zhvillimit të WEB-së kërkonte krijimin e mjeteve universale dhe kompakte të përpunimit të informacionit tekstual me sasinë minimale të kodit të kërkuar për këtë. Gjuha PHP, e cila është e njohur në mesin e fillestarëve dhe zhvilluesve profesionistë, nuk bën përjashtim. Shprehja e rregullt si gjuhë e shabllonit të tekstit bën të mundur thjeshtimin e detyrave të përpunimit të tekstit dhe reduktimin e kodit të programit me dhjetëra ose qindra rreshta. Shumë detyra nuk mund të zgjidhen fare pa të.

Shprehjet e rregullta në PHP

Gjuha PHP përmban tre mekanizma për të punuar me shprehje të rregullta - "ereg", "mb_ereg" dhe "preg". Më e zakonshme është ndërfaqja "preg", funksionet e së cilës ofrojnë akses në bibliotekën regex PCRE, e zhvilluar fillimisht për gjuhën Perl, e cila përfshihet me PHP. Funksionet Preg kërkojnë përputhje në një varg teksti të caktuar sipas një modeli të caktuar në gjuhën e shprehjes së rregullt.

Bazat e sintaksës

Në kuadrin e një artikulli të shkurtër, është e pamundur të përshkruhet në detaje e gjithë sintaksa e shprehjeve të rregullta; ekziston literaturë e veçantë për këtë. Këtu janë vetëm elementët kryesorë për të treguar mundësitë e gjera për zhvilluesin dhe për të kuptuar shembujt e kodit.

Formalisht është shumë e vështirë të përcaktohet, dhe për këtë arsye ne do të thjeshtojmë përshkrimin. Shprehja e rregullt është një varg teksti. Ai përbëhet nga një shabllon i kufizuar dhe një modifikues që specifikon se si ta trajtoni atë. Është e mundur të përfshihen alternativa dhe përsëritje të ndryshme në shabllone.

Për shembull, në shprehje / \ d (3) - \ d (2) - \ d (2) / m ndarës do të jetë «/» , e ndjekur nga modeli dhe simboli "M" do të jetë një modifikues.

E gjithë fuqia e shprehjeve të rregullta është e koduar duke përdorur metakaraktere. Metakarakteri kryesor i gjuhës është një vijë e prapme - "\". Ai ndryshon llojin e personazhit tjetër në atë të kundërt (d.m.th., një personazh i zakonshëm bëhet një metakarakter dhe anasjelltas). Një tjetër metakarakter i rëndësishëm është prerja përpara "|", e cila specifikon alternativat e modelit. Më shumë shembuj të metakaraktereve:

PHP e trajton hapësirën si një karakter të veçantë domethënës kur përpunon shprehje të rregullta, kështu që shprehjet ABCGDE dhe ABC WHERE janë të ndryshme.

Nënmodelët

Në PHP, nënmodelet e rregullta janë të mbyllura në kllapa dhe ndonjëherë quhen "nënshprehje". Ata kryejnë funksionet e mëposhtme:

    Theksimi i alternativave... Për shembull, shabllonin nxehtësia (disa | zog |) përputhet me fjalët "Nxehtësia", "zogu i zjarrit" dhe "i pjekur"... Dhe pa kllapa, do të jetë vetëm një varg bosh, "zog" dhe "roast".

    Një nënmodel "emocionues". Kjo do të thotë që nëse një nënvarg përputhet në model, atëherë të gjitha ndeshjet kthehen si rezultat. Për qartësi, le të japim një shembull. Duke pasur parasysh regex-in e mëposhtëm: fituesi merr ((ar | i praruar) (medalje | kupë)) - dhe një varg për të gjetur ndeshje: "Fituesi merr një medalje të artë"... Përveç frazës origjinale, kërkimi do të kthehet: "Medalje të artë", "Medalje", "ari".

Operatorët e përsëritjes (Kuadrifikuesit)

Kur shkruani shprehje të rregullta, shpesh është e nevojshme të analizohen përsëritjet e numrave dhe simboleve. Ky nuk është problem nëse nuk ka shumë përsëritje. Por çka nëse nuk e dimë numrin e saktë të tyre? Në këtë rast, duhet të përdorni metakarakter të veçantë.

Për të përshkruar përsëritjet, përdoren kuadrifikues - metakarakter për specifikimin e numrit. Kuadrifikuesit janë dy llojesh:

  • e përgjithshme, e mbyllur në kllapa;
  • shkurtuar.

Kuantifikuesi i zakonshëm specifikon numrin minimal dhe maksimal të përsëritjeve të lejuara të një elementi në formën e dy numrave në kllapa kaçurrelë, për shembull: x (2.5). Nëse numri maksimal i përsëritjeve është i panjohur, argumenti i dytë hiqet: x (2,).

Kuantifikuesit e shkurtuar janë karaktere për përsëritjet më të zakonshme për të shmangur mbingarkimin e panevojshëm sintaksor. Zakonisht përdoren tre shkurtesa:

1. * - zero ose më shumë përsëritje, që është e barabartë me (0,).

2. + - një ose më shumë përsëritje, d.m.th.,).

3.? - zero ose vetëm një përsëritje - (0,1).

Shembuj të shprehjeve të rregullta

Për këdo që mëson shprehje të rregullta, shembujt janë mësimi më i mirë. Ne do të japim disa që tregojnë aftësitë e tyre të gjera me një përpjekje minimale. Të gjithë kodet e programit janë plotësisht të pajtueshëm me PHP 4.x dhe versionet më të larta. Për një kuptim të plotë të sintaksës dhe përdorimin e të gjitha veçorive të gjuhës, ne rekomandojmë librin e J. Friedl "Shprehjet e rregullta", i cili shqyrton plotësisht sintaksën dhe jep shembuj të shprehjeve të rregullta jo vetëm në PHP, por edhe për gjuhët Python, Perl, MySQL, Java, Ruby dhe C #.

Kontrollimi i korrektësisë së adresës së postës elektronike

Detyrë. Ekziston një faqe interneti që i kërkon vizitorit një adresë emaili. Shprehja e rregullt duhet të kontrollojë vlefshmërinë e adresës së marrë përpara se të dërgojë mesazhe. Verifikimi nuk garanton që kutia postare e specifikuar ekziston vërtet dhe pranon letra. Por mund të eliminojë adresat qëllimisht të pasakta.

Zgjidhje. Ashtu si me çdo gjuhë programimi, në PHP, regjimet e vërtetimit të adresës së emailit mund të zbatohen në mënyra të ndryshme, dhe shembujt në këtë artikull nuk janë opsioni përfundimtar dhe i vetëm. Prandaj, në secilin rast, ne do të ofrojmë një listë të kërkesave që duhet të merren parasysh gjatë programimit, dhe zbatimi specifik varet tërësisht nga zhvilluesi.

Pra, shprehja e vërtetimit të emailit duhet të kontrollojë kushtet e mëposhtme:

  1. Prania e simbolit @ në vargun origjinal dhe mungesa e hapësirave.
  2. Pjesa e domenit të adresës, e ndjekur nga simboli @, përmban vetëm karaktere të vlefshme për emrat e domeneve. E njëjta gjë vlen edhe për emrin e përdoruesit.
  3. Gjatë vërtetimit të një emri përdoruesi, është e nevojshme të përcaktohet prania e karaktereve speciale, si p.sh. një apostrof ose. Karaktere të tilla janë potencialisht të rrezikshme dhe mund të përfshihen në sulme të tilla si injeksioni SQL. Shmangni adresa të tilla.
  4. Emrat e përdoruesve pranojnë vetëm një pikë, e cila nuk mund të jetë karakteri i parë ose i fundit në një rresht.
  5. Emri i domenit duhet të përmbajë të paktën dy dhe jo më shumë se gjashtë karaktere.

Një shembull që merr parasysh të gjitha këto kushte mund të shihet në figurën më poshtë.

Verifikimi i URL-ve

Detyrë. Kontrolloni nëse vargu i tekstit të dhënë është i vlefshëm. Vini re përsëri se shprehjet e rregullta të vërtetimit të URL-së mund të zbatohen në mënyra të ndryshme.

Zgjidhje. Versioni ynë përfundimtar duket si ky:

/^(https?:\/\/)?((\da-z\.->+)\.((2,6))((\/\w \ .-] *) * \ /? $ /

Tani le të analizojmë përbërësit e tij në më shumë detaje duke përdorur figurën.

Kontrollimi i numrave të kartës së kreditit

Detyrë.Është e nevojshme të kontrolloni saktësinë e numrit të futur të kartës plastike të sistemeve më të zakonshme të pagesave. Opsioni i konsideruar vetëm për kartat

Zgjidhje. Kur krijoni një shprehje, duhet të merrni parasysh praninë e mundshme të hapësirave në numrin e futur. Numrat në kartë ndahen në grupe për lexim dhe diktim të lehtë. Prandaj, është e natyrshme që një person të përpiqet të fusë një numër në këtë mënyrë (d.m.th. duke përdorur hapësira).

Shkrimi i një shprehjeje të përgjithshme që merr parasysh hapësirat dhe vizat e mundshme është më e vështirë sesa thjesht të hedhësh poshtë të gjithë karakteret përveç numrave. Prandaj, rekomandohet përdorimi i metakarakterit / D në shprehje, i cili heq të gjitha karakteret përveç numrave.

Tani mund të shkoni drejtpërdrejt te kontrollimi i numrit. Të gjitha kompanitë e kartave të kreditit përdorin një format unik të numrit. Shembulli e përdor këtë dhe klienti nuk ka nevojë të fusë emrin e kompanisë - ai identifikohet me numër. Kartat Visa gjithmonë fillojnë me 4 dhe janë 13 ose 16 shifra. MasterCard fillon në rangun 51-55 me një gjatësi prej 16. Si rezultat, marrim shprehjen e mëposhtme:

Para përpunimit të porosisë, mund të kontrolloni gjithashtu shifrën e fundit të numrit, i cili llogaritet duke përdorur algoritmin Luna.

Kontrollimi i numrave të telefonit

Detyrë. Kontrollimi i saktësisë së numrit të telefonit të futur.

Zgjidhje. Numri i shifrave në numrat e telefonit fiks dhe celular ndryshon në mënyrë të konsiderueshme nga vendi në vend, kështu që është e pamundur të kontrollohet universalisht një numër telefoni duke përdorur shprehje të rregullta për saktësinë. Por numrat ndërkombëtarë kanë një format të rreptë dhe janë të shkëlqyera për kontrollimin e modeleve. Për më tepër, gjithnjë e më shumë operatorë telefonikë kombëtarë po përpiqen të respektojnë një standard të vetëm. Struktura e çështjes është si më poshtë:

+ CCC.NNNNNNNNNNxEEEE, ku:

C është një kod shteti 1-3 shifror.

N - numër deri në 14 shifra.

E është një shtesë opsionale.

Plus kërkohet dhe x është i pranishëm vetëm kur kërkohet një zgjatje.

Si rezultat, kemi shprehjen e mëposhtme:

^ \ + (1,3) \. (4,14) (?: x. +)? $

Numrat në gamë

Detyrë. Duhet të siguroheni që një numër i plotë nga një gamë e caktuar përputhet. Për më tepër, kërkohet që shprehjet e rregullta të gjejnë numra vetëm nga një varg vlerash.

Zgjidhje. Këtu janë disa shprehje për disa nga rastet më të zakonshme:

Gjetja e një adrese IP

Detyrë. Duhet të përcaktoni nëse vargu i specifikuar është një adresë IP e vlefshme IPv4 në intervalin 000.000.000.000-255.255.255.255.

Zgjidhje. Si me çdo detyrë në PHP, një shprehje e rregullt ka shumë ndryshime. Për shembull, diçka si kjo:

Kontrolli online i shprehjeve

Kontrollimi i saktësisë së shprehjeve të rregullta mund të jetë i vështirë për programuesit fillestarë për shkak të kompleksitetit të sintaksës, e cila ndryshon nga gjuhët "normale" të programimit. Për të zgjidhur këtë problem, ka shumë testues të shprehjeve në internet që ju lejojnë të kontrolloni lehtësisht korrektësinë e shabllonit të krijuar në tekst real. Programuesi fut një shprehje dhe të dhëna për verifikim dhe shikon menjëherë rezultatin e përpunimit. Zakonisht, ekziston edhe një seksion referimi, i cili përshkruan në detaje shprehjet e rregullta, shembujt dhe ndryshimet e zbatimit për gjuhët më të zakonshme të programimit.

Por besimi plotësisht i rezultateve të shërbimeve në internet nuk rekomandohet për të gjithë zhvilluesit që përdorin PHP. Një regex, i shkruar dhe i testuar personalisht, është i përditësuar dhe i garantuar të jetë pa gabime.

Përdorimi më i zakonshëm i shprehjeve të rregullta në Perl është në kërkimin dhe zëvendësimin e operatorëve si p.sh s //, m /, operatorët e paketës =~ ose != etj. Si rregull, të gjithë këta operatorë kanë opsione të ngjashme si:

Këto opsione zakonisht quhen "/ x". Ato mund të përdoren edhe brenda shablloneve duke përdorur konstruksionin e ri (? ...)

Shprehjet ose modelet e rregullta janë të njëjta me procedurat Unix regexp. Shprehjet dhe sintaksa janë huazuar nga Rutinat Falas V8 të Henry Spencer dhe janë të detajuara atje.

Modelet përdorin metakarakterët e mëposhtëm (karaktere që përfaqësojnë grupe personazhesh të tjerë), të referuar shpesh si standardi egrep:

Metakarakterët kanë modifikues (të shkruar pas metakarakterit):

Në të gjitha rastet e tjera, mbajtëset kaçurrela konsiderohen karaktere të rregullta (të rregullta). Kështu, "*" është ekuivalente me (0,), "+" - (1,) dhe "?" - (0,1). n dhe m nuk mund të jenë më të mëdha se 65536.

Si parazgjedhje, metakarakterët janë të pangopur. Ndeshja përhapet sa më shumë që të jetë e mundur, duke mos marrë parasysh efektin e metakaraktereve të mëposhtëm. Nëse dëshironi të "ulni oreksin e tyre", përdorni simbolin "?". Kjo nuk ndryshon kuptimin e metakaraktereve, thjesht zvogëlon përhapjen. Në këtë mënyrë:

Modelet funksionojnë në të njëjtën mënyrë si thonjëzat e dyfishta, kështu që ju mund të përdorni karaktere `\` - (karaktere me vijë të kundërt) në to:

\ t - karakteri i skedës
\ n - linjë e re
\ r - një kthim me karrocë
\a - përkthimi në format
\ v - skedë vertikale
\ a - thirrni
\ e - arratisje
\033 - shënim oktal i një karakteri
\ x1A - heksadecimal
\ c [ - karakteri i kontrollit
\ l - shkronja të vogla të karakterit tjetër
\ u - me shkronja kapitale -//-
\ L - të gjitha karakteret e vogla deri në \ E
\ U - në krye - // -
\ E - kufizimi i ndryshimit të regjistrimit
\ Q - anulimi i një veprimi si metakarakter

Për më tepër, metakarakterët e mëposhtëm janë shtuar në Perl:

Vini re se ky është i gjithi "një" karakter. Përdorni modifikues për të treguar sekuencën. Kështu që:

Përveç kësaj, ka metakaraktere imagjinare. Përcaktimi i karaktereve joekzistente në pikën ku vlera ka ndryshuar. Të tilla si:

Kufiri i fjalës (\ b) është pika imagjinare midis karaktereve \ w dhe \ W. Brenda një klase karakteresh, "\ b" tregon një karakter prapaspece. Metakarakteret \ A dhe \ Z- e ngjashme me "^" dhe "$", por nëse fillimi i rreshtit "^" dhe fundi i rreshtit "$" janë të vlefshëm për çdo rresht në një rresht me shumë rreshta, atëherë \ A dhe \ Z tregojnë fillimin dhe fundin e një vargu të tërë me shumë rreshta.

Nëse grupimi (kllapa) përdoret brenda modelit, numri i nënvargut të grupit shënohet si "\ shifër". Vini re se pas një modeli brenda një shprehjeje ose blloku, këto grupe quhen "shifra $". Përveç kësaj, ka variabla shtesë:

Shembull:

$ s = "Një 1 dy 2 dhe tre 3"; nëse ($ s = ~ / (\ d +) \ D + (\ d +) /) (print "$ 1 \ n"; # Rezultati "1" print "$ 2 \ n"; # "2" print " $ + \ n" ; # "2" print "$ & \ n"; # "1 dy 2" print "$` \ n "; #" Një "print" $ "\ n"; # "dhe tre 3" )

Versioni 5 i Perl përmban konstruksione shtesë të shabllonit:

Shembull:

$ s = "1 + 2-3 * 4"; nëse ($ s = ~ / (\ d) (? = -) /) # Gjeni shifrën e ndjekur nga "-" (printoni "$ 1 \ n"; # Rezultati "2") tjetër (printoni "gabim kërkimi \ n ";)

(?! model) - duke parë përpara me anë të mohimit:

Shembull:

$ s = "1 + 2-3 * 4"; nëse ($ s = ~ / (\ d) (?! \ +) /) # Gjeni një shifër që nuk pasohet nga "+" (print "$ 1 \ n"; # Rezultati "2") tjetër (print " gabim kërkimi \ n ";)

(? ismx) - modifikues "të brendshëm". Është i përshtatshëm për t'u përdorur në shabllone, ku, për shembull, duhet të specifikoni një modifikues brenda shabllonit.

Rregullat e shprehjes së rregullt. (regex)

  1. Çdo personazh qëndron në vetvete, përveç nëse është një metakarakter. Nëse keni nevojë të zhbëni një metakarakter, paraprijeni atë me "\".
  2. Një varg karakteresh tregon një varg të atyre karaktereve.
  3. Grupi i karaktereve të mundshme (klasa) është i mbyllur në kllapa katrore "", që do të thotë se një nga karakteret e treguar në kllapa mund të shfaqet në këtë vend. Nëse karakteri i parë në kllapa është "^" - atëherë asnjë nga karakteret e specifikuara nuk mund të shfaqet në këtë vend në shprehje. Brenda një klase, mund të përdorni karakterin "-" për të treguar një sërë karakteresh. Për shembull, a-z është një nga shkronjat e vogla të alfabetit latin, 0-9 është një numër, etj.
  4. Forumi i portalit PHP. SU

Shprehjet e rregullta janë një mjet shumë i fuqishëm, por në të njëjtën kohë i vështirë për t'u kuptuar, për përpunimin e vargjeve. Unë do të përshkruaj pikat kryesore. Një shprehje e rregullt është një model vargu. Duke përdorur këtë model, mund të kërkoni për dukuritë, të bëni zëvendësime, të kontrolloni për përputhjen e modelit.

Rregullat e kompozimit të modeleve

Kufijtë e shabllonit duhet të tregohen me simbole të caktuara, shpesh përdorni " / "por unë preferoj të përdor" # "sepse bollëku i vijave përpara / prapa mund t'i bëjë sytë tuaj të duken të tmerrshëm dhe" grilat "zakonisht nuk përdoren askund tjetër. Pra:" #Trupi me shprehje të rregullt #"

Brenda shprehjes së rregullt, përdoren kllapa - këto janë nënshprehje që mund të manipulohen, për shembull:

# ^ / katalog / (+) / (+) \. html. * #

Kjo shprehje është për marrjen e parametrave në një varg Url... Në fillim të rreshtit ka një karakter të veçantë " ^ "- kjo do të thotë fillimi i një rreshti. Tjetra vjen" / katalog /"- nuk ka karaktere të veçanta, ky është vetëm tekst që duhet të përmbahet në varg. Më pas ata takuan kllapat, domethënë arritën në nënshprehjen e parë. Kllapat katrore tregojnë grupin e karaktereve që mund të jenë në vargun në këtë vend . Shenjë" - "do të thotë numërim. Shenjë" \ "shpëtojnë karaktere të veçanta. Kështu, në nënshprehjen e parë, mund të kemi shkronja të mëdha dhe të vogla të alfabetit latin, numrat nga 0 deri në 9, nënvizon, vizë dhe pikë. Viza dhe pika janë karaktere të veçanta, por këtu janë ikje, pra këtu janë vetëm simbole. Pas kllapave ka një " + "- kjo do të thotë se karakteri i mëparshëm (dhe ne kemi këtë grup karakteresh në kllapa katrore) mund të shkojë 1 ose më shumë herë. Pastaj vjen" / "është thjesht një karakter, dhe një nënshprehje e dytë e ngjashme. Pastaj vjen" \ .html"që do të thotë tekst" .html". Dhe pastaj personazhe speciale" .* "Pika do të thotë çdo karakter, dhe një yll nënkupton çdo sasi të karakterit të mëparshëm. Kjo është, pas" .html"Gjithçka mund të shkojë.

Tregimi i sasisë, kuantifikuesit

Më lart, ne kemi konsideruar tashmë karaktere të tillë që tregojnë numrin e karaktereve të mëparshme, si p.sh + dhe * ... Këtu janë të gjitha mundësitë për të specifikuar sasinë:

Personazhe të veçanta

Ekzistojnë shkurtesa të veçanta për disa grupe personazhesh:

"lakmia"

Le të hedhim një vështrim në nocionin e lakmisë regex. Për shembull, ekziston një rresht:

#()#

Lexojmë: nënshprehje:

Nëse gjithçka është e saktë, nënshprehja përputhet:

Por përshtatet gjithashtu:

Ne do ta marrim, sepse shprehjet e rregullta janë lakmitare si parazgjedhje. Ju mund të hiqni lakminë duke përdorur modifikuesin " U", si kjo:

#() #U

Modifikuesit

Shprehja e rregullt mund të ndiqet nga modifikues: " #ThereRegularExpressionBody #ThatModifiers"Llojet e modifikuesve:

i Aktivizon modalitetin e pandjeshëm ndaj shkronjave të mëdha, d.m.th. shkronjat e mëdha dhe të vogla nuk ndryshojnë në shprehje.
m Tregon që teksti që kërkohet duhet të trajtohet si rreshta të shumëfishtë. Si parazgjedhje, motori i shprehjeve të rregullta e trajton tekstin si një varg të vetëm, pavarësisht se çfarë është në të vërtetë. Prandaj, metakarakteret "^" dhe "$" tregoni fillimin dhe fundin e të gjithë tekstit. Nëse ky modifikues është i specifikuar, atëherë ata do të tregojnë përkatësisht fillimin dhe fundin e çdo rreshti të tekstit.
s Metakarakteri i paracaktuar " . "Nuk përfshin një karakter të furnizimit të linjës në përkufizimin e tij. Specifikimi i këtij modifikuesi e heq këtë kufizim.
U Heq lakminë e regeksit
u Mundëson punën me shprehjet e rregullta cirilik në UTF-8, përndryshe nuk funksionon si duhet.

php Funksionet për të punuar me shprehje të rregullta

preg_zëvendësoj

Gjeni dhe zëvendësoni:

Preg_replace (model i përzier $, zëvendësim i përzier $, subjekt i përzier $ [, int $ limit = -1 [, int & $ count]]);

Çdo vlerë mund të jetë një varg ose një grup, në rast $ subjekt array - kthehet një grup, përndryshe një varg

preg_ndarje

Ndan një varg me shprehje të rregullt:

Preg_split (vargu $ model, vargu $ subjekt [, int $ limit = -1 [, int $ flags = 0]]);

Kthen një grup nënvargjesh të vargut të dhënë subjekt e cila zbërthehet përgjatë kufijve që përputhen me modelin model.

Le të fillojmë me atë që është një regex. Këtu është përgjigja për pyetjen time, a ka shkronjën "e" në fjalën "test"? "Ka!" ti thua. Pastaj ju bëj pyetjen e dytë, si e gjetët shkronjën "e" në fjalën "test"? Përgjigja është e qartë, marrim karakterin e parë, pra "t" dhe e krahasojmë me atë që kërkojmë, pra me "e". Nëse nuk janë të barabartë, atëherë marrim karakterin e dytë, domethënë "e", e krahasojmë me atë që kërkojmë, domethënë "e". Voila! U gjet një ndeshje. Përgjigje: Fjala "test" përmban shkronjën "e".

Tani më përgjigjeni një pyetje tjetër, ku është shprehja e rregullt në këtë shembull? Shpresoj ta keni marrë me mend se shprehja e rregullt këtu është ajo që ne po kërkojmë te fjala "test". Kjo do të thotë, shkronja "e" në këtë shembull është një shprehje e rregullt.

Për çfarë përdoren shprehjet e rregullta në php? Në praktikën time, shprehjet e rregullta janë përdorur, për shembull, për të përcaktuar nëse një adresë emaili është e mirëformuar. Shprehje të tilla përdoren gjithashtu për të përcaktuar saktësinë e emrit të përdoruesit dhe fjalëkalimit. Duke përdorur shprehje të rregullta, mund të gjeni adresën në lidhje dhe ta ruani atë. Shumë gjëra që mund të bëni Duke e analizuar këtë, mund të identifikoni funksionin kryesor të shprehjeve të rregullta dhe dy ato anësore. Funksioni kryesor, ky është një kërkim për ndeshjet në një varg. Efektet anësore janë ruajtja e ndeshjeve të gjetura dhe zëvendësimi i tyre.

Shprehja e parë e rregullt

Në teori, ne kuptojmë se si të gjejmë simbolin "e" në fjalën "test", si zbatohet kjo në praktikë? Për të përdorur shprehje të rregullta në php, zakonisht përdoren funksionet e mëposhtme:

preg_match ("shprehje e rregullt (modeli)", "ndryshore në të cilën kryhet kërkimi", "ndryshore në të cilën është ruajtur rezultati i kërkimit (parametër opsional)"); - Funksioni i përputhjes
preg_replace ("shprehje e rregullt (modeli)", "Me çfarë të zëvendësohet përputhja e gjetur", "ndryshore në të cilën të zëvendësohet"); - Funksioni i zëvendësimit

Le të fillojmë të përdorim këto funksione .. Këtu është një shembull i gjetjes së karakterit "e" në fjalën "test":

$ a = "test";
nëse (preg_match ("/ e /", $ a)) echo "u gjet !!";

Kodi përshkruan gjendjen, nëse diçka gjendet në ndryshoren $ a sipas modelit, atëherë shfaq mesazhin "found !!" Siç mund ta shihni, modeli ynë është midis dy "/". Në këtë rast, "/" simbolizon fillimin dhe fundin e shabllonit tonë... Shpresoj se kjo është e qartë.

E gjithë kjo është sigurisht interesante ... por ky është vetëm modeli ynë, i cili është shumë i thjeshtë, nuk mendoni? Në fund të fundit, ne rrallë kemi nevojë të gjejmë ndonjë simbol në një ndryshore. Në shumicën e rasteve, duhet të gjejmë shumë simbole, për më tepër, të panjohura. Si të jesh? Le t'i vendosim vetes një problem dhe të përpiqemi ta zgjidhim atë. Supozoni se kemi një varg të përbërë nga numra dhe një shkronjë e panjohur angleze

Si e gjeni këtë letër? Mund të ketë ndonjë shkronjë të alfabetit anglez, si mund ta përkufizoni atë? Ju vetë iu përgjigjët pyetjes suaj, ka ndonjë shkronjë, domethënë është në rangun nga a në z. Vargjet mund të përdoren në shprehje të rregullta. Nëse nuk e dimë se çfarë karakteri po kërkojmë, por e dimë me siguri se ky karakter është një shkronjë e alfabetit anglez, atëherë rekordi do të jetë si më poshtë:

$ a = "123a321";
nëse (preg_match ("//", $ a)) echo "u gjet !!";

Vini re se diapazoni është i mbyllur në kllapat "[" "]". Çdo gjë që është e mbyllur në kllapa të tilla përkufizohet si një karakter, në këtë rast karakteri varion nga a në z. Nëse nuk duhet të gjejmë një shkronjë, por një numër, atëherë rekordi do të jetë si ky:

$ a = "abc1cba";
nëse (preg_match ("//", $ a)) echo "u gjet !!";

Dua të vërej gjithashtu se shprehjet e rregullta janë të ndjeshme ndaj shkronjave, kështu që karakteret "A" dhe "a" janë krejtësisht të ndryshme, për të kërkuar ato dhe ato karaktere, ata shkruajnë kështu:

$ a = "123a321";
nëse (preg_match ("//", $ a)) echo "u gjet !!";

Ekziston edhe një kërkim për shkronjat ruse, ai kryhet në të njëjtën mënyrë si në anglisht:

$ a = "123ы321";
nëse (preg_match ("/ [a-za-z] /", $ a)) jehonë "gjetur !!";

Metakarakteret

Ne kemi mësuar se si të kërkojmë një karakter të panjohur në një varg. Po sikur të na duhet të gjejmë disa simbole? Të ashtuquajturat metakaraktere vijnë në shpëtim ... Supozoni se kemi një varg me numra, shkronja, si ta përshkruajmë atë në shabllon? Ti mund ta besh kete:

varg - 123а321
mostër -

Hmm ... shablloni me të vërtetë përputhet me vargun tonë dhe kur kontrollohet për pajtueshmëri, ai do të japë të vërtetën e shumëpritur! Por një lloj regjistrimi i rëndë, nuk mendoni?

Ja si mund ta shkurtoni atë:

varg - 123а321
mostër - *

Më duket shumë më e shkurtër Çfarë është simboli "*"? Ky është vetë metakarakteri, do të thotë që karakteri që kemi përshkruar (domethënë, një karakter që mund të përmbajë numra nga 0 në 9 ose shkronja të alfabetit anglez, nga a në z) mund të përsëritet pafundësisht, ose më shumë se një herë. Po Po! Ky metakarakter do të përputhet në një variabël bosh, pasi edhe mungesa e simbolit që kemi përshkruar do të kthehet e vërtetë! Mbaje mend këte

Çfarë metakarakterash të tjerë ka?

Për shembull metakarakteri "+" Është pothuajse i ngjashëm me metakarakterin "*" me një përjashtim të vogël. "*" do të kthehet e vërtetë edhe nëse nuk ka karakter, dhe "+" do të kontrollojë praninë e të paktën një karakteri. Kjo do të thotë, nëse vargu kërkon praninë minimale karakter i vetëm pastaj përdorni "+" në vend të "*"

Metakarakteri "?" Do të thotë që vargu duhet të përmbajë jo më shumë se një karakter të kërkuar. Më lejoni t'ju jap disa shembuj për dy metakarakterët e fundit që përshkrova.

Supozoni se duhet të kontrollojmë fjalëkalimin e përdoruesit për korrektësi. Le të mendojmë se çfarë duhet të përmbajë fjalëkalimi i përdoruesit? Epo, së pari, duhet të jetë të paktën një personazh. Së dyti, duhet të përmbajë vetëm numra dhe shkronja të alfabetit anglez, kështu që shprehja e rregullt do të duket si kjo:

$ a = "qwerty12345";

Çfarë personazhesh kemi lejuar? Shkronjat angleze të çdo regjistri dhe numrash. Tani përpiquni të lini një rresht bosh në vend të fjalëkalimit.

$ a = "";
if (preg_match ("/ + /", $ a)) echo "Fjalëkalimi është i saktë";

Ju nuk do të shihni mesazhin "Fjalëkalimi është i saktë". Pse? Sepse metakarakteri "+" kontrolloi vargun për praninë e të paktën një karakteri.

Dhe tani një truk i vogël, le t'i hedhim një sy shprehjes sonë, ne nuk lejuam, të themi, një hapësirë ​​në të, apo jo? vendosni një hapësirë ​​në fund të fjalëkalimit dhe ekzekutoni

$ a = "qwerty12345";
if (preg_match ("/ + /", $ a)) echo "Fjalëkalimi është i saktë";

Dhe pse e shohim mesazhin tonë për fjalëkalimin e saktë? Mjaft e thjeshtë ... funksioni preg_match (); ndalon kontrollin në ndeshjen e parë. Kjo do të thotë, karakteri "q" përputhet me modelin e përshkruar nga ne dhe gjithçka tjetër nuk është më e rëndësishme për funksionin. Pra, çfarë të bëni? Ja se si ta rregulloni atë:

$ a = "qwerty12345";
if (preg_match ("/ ^ + $ /", $ a)) echo "Fjalëkalimi është i saktë";

Duke shtuar "^" në fillim të shprehjes dhe "$" në fund, ne i themi funksionit që të përputhet me modelin. të gjitha linjë. Nëse përdorni këtë kod, nuk do ta shihni mesazhin, pasi fundi i fjalëkalimit përmban një karakter të pavlefshëm - një hapësirë

Tani ndryshoni metakarakterin "+" në "?" Çfarë mendoni se do të ndodhë? Mesazhi i saktë për saktësinë e fjalëkalimit do të mungojë, pasi fjalëkalimi përmban më shumë se një karakter. Shpresoj se kam shpjeguar siç duhet se si funksionojnë këto tre metakaraktere të përdorura zakonisht.

Ndonjëherë "jo" është më mirë

Së paku, ne mësuam se si të kontrollojmë saktësinë e fjalëkalimit, dhe kjo është mirë! Më lejoni t'ju tregoj për një mënyrë tjetër për të gjetur diçka në një varg. Le të themi se duhet të kontrollojmë mungesën e numrave në një varg. Si ta bëjmë atë? Këtu është linja:

(Unë i futa qëllimisht këto simbole "-_ + ()" në të, në mënyrë që jeta të mos dukej si mjaltë ...) Mund të kompozojmë shprehjen e mëposhtme:

Por ju duhet të pajtoheni, sepse ne nuk e dimë gjithmonë se cilat karaktere përdoren në një varg, por e dimë me siguri që nuk duhet të ketë numra në të! Prandaj, do të ishte më logjike të shkruani thjesht një shabllon që do të kalonte rreshtat në të cilat Nr shifra, dhe jo ato në të cilat ka "O Zot, sa simbole të pakuptueshme !!!"... Këtu është një shembull i një shprehjeje të mirëformuar për detyra të tilla:

$ a = "a -_ + ()";
nëse (preg_match ("/ ^ [^ 0-9] + $ /", $ a)) jehonë "Nuk ka numra!";

Si e arritëm këtë? Ne kemi prezantuar një simbol por! kapaku "^" ([^ 0-9]) i vendosur në fillim do të thotë se linja e këtij karakteri përmban nuk duhet Shpresoj se e kemi kuptuar

Epo, le të përfundojmë pak ... Unë do të jap dy shembuj me shpjegime, gjatë të cilave do të mësojmë se si ta ruajmë rezultatin e kërkimit në një ndryshore dhe të mësojmë se si të kontrollojmë korrektësinë e adresës postare

E pashë, e ruajta!

Blogu im

$ a = " Blogu im";
preg_match ("/ / ", $ a);

Në shprehjen tonë të rregullt, ne kemi përshkruar të gjitha karakteret e mundshme që mund të përfshihen në lidhje. Dua të tërheq vëmendjen edhe te thonjëzat dhe karakteret "/" në shprehjen tonë. Çështja është se "/" dhe thonjëza janë karaktere të veçanta në vetvete. Dhe në mënyrë që shablloni t'i perceptojë ato si simbole të zakonshme, ne duhet t'i kontrollojmë ato. Ekranizimi kryhet duke shtuar një vijë të prapme përpara karaktereve speciale. Shpresoj se është e qartë

$ a = " Blogu im";
preg_match ("/ / ", $ a, $ b);

Epo, dhe në përputhje me rrethanat, duhet të shtoni një parametër shtesë në formën e ndryshores $ b, në të cilën do të ruhet lidhja e gjetur. Ju gjithashtu duhet të dini se rezultati i kërkimit është vendosur në një grup. Pra, ndryshorja $ b është një grup. Informacioni që ne kërkojmë është nën indeksin 1. Kjo do të thotë se rezultati i kërkimit është në variablin $ b. ne do të shfaqim rezultatin në ekran:

$ a = " Blogu im";
preg_match ("/ / ", $ a, $ b);
jehonë $ b;

Adresa e saktë është çelësi i suksesit!

Epo, në hapin tjetër, përgjigja e pyetjes, a është e-mail i saktë? Së pari, duhet të dini se cilat karaktere lejohen në adresa? Me sa di unë, personazhet e lejuar përfshijnë:

  • Shkronjat angleze, numrat, "_", "-" emmmm si gjithçka ... Le të vazhdojmë nga kjo.
  • Më pas kemi "@"
  • Më pas, shkronja angleze
  • Më tej, pika
  • Dhe përsëri, shkronjat angleze ...

Pra, shprehja e rregullt do të jetë si më poshtë:

$ a = " [email i mbrojtur]";
nëse (preg_match ("/ ^ [email i mbrojtur]+. + $ / ", $ a)) echo" Adresa e emailit është e saktë! ";
else echo "Adresa e emailit NUK është e saktë!";

Epo ... shpresoj që regjistrime të tilla të mos ju frikësojnë tani, dhe ju mund t'i kuptoni plotësisht ato.

Në vazhdim dua të them diçka. Artikulli doli të ishte i rëndë dhe në të njëjtën kohë mbulonte vetëm një pjesë të mundësive. Nëse jeni duke e lexuar këtë fjali, atëherë me shumë mundësi e keni lexuar deri në fund, nga e cila ju falënderoj shumë

Sa i përket ciklit të artikujve për zhvillimin e një blogu cms, pjesa e parë e ciklit E shpall të mbyllur! Në të ardhmen e afërt do të fillojmë të zbatojmë panelin e administratorit, kështu që mos "ndërroni" Nëse keni ndonjë pyetje, unë do të jem i lumtur t'ju përgjigjem. Të gjitha të mirat për ju, unë kam gjithçka!

Artikujt kryesorë të lidhur