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

Regex php është shkruar me katër fjalë. Shprehje të rregullta (modele)

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 pas "-" (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 ndiqet 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ë modele të veçanta për gjetjen e një nënvargu në tekst. Me ndihmën e tyre, ju mund të zgjidhni detyrat e mëposhtme në një rresht: "kontrolloni nëse vargu përmban numra", "gjeni të gjitha adresat e postës elektronike në tekst", "zëvendësoni disa pikëpyetje të njëpasnjëshme me një".

Le të fillojmë me një mençuri të njohur programimi:

Disa njerëz, kur përballen me një problem, mendojnë: "Po, jam i zgjuar, do ta zgjidh me shprehje të rregullta". Tani ata kanë dy probleme.

Modelet e mostrave

Le të fillojmë me disa shembuj të thjeshtë. Shprehja e parë në foton më poshtë kërkon një sekuencë prej 3 shkronjash, ku shkronja e parë është "k", e dyta është çdo shkronjë ruse dhe e treta është "t" e pandjeshme ndaj shkronjave (për shembull, "cat" ose "CAT" përputhet me këtë model). Shprehja e dytë kërkon kohën në tekst në formatin 12:34.

Çdo shprehje fillon me një karakter ndarës. Simboli / zakonisht përdoret si ai, por mund të përdorni edhe simbole të tjera që nuk kanë qëllim të veçantë në modelet e rregullta, për shembull, ~, # ose @. Kufizuesit alternativë përdoren nëse / mund të shfaqet në shprehje. Më pas vjen modeli i vargut që kërkojmë, i ndjekur nga një ndarës i dytë, dhe në fund mund të ketë një ose më shumë shkronja flamuri. Ato ofrojnë opsione shtesë kur kërkoni për tekst. Këtu janë disa shembuj të flamujve:

  • i - thotë se kërkimi duhet të jetë i pandjeshëm ndaj shkronjave të mëdha (sipas parazgjedhjes me ndjeshmëri të madhe)
  • u - thotë se shprehja dhe teksti që kërkohet janë duke përdorur kodim utf-8, jo vetëm shkronja latine. Pa të, kërkimi për karaktere ruse (dhe çdo karakter tjetër jo latin) mund të mos funksionojë siç duhet, kështu që duhet ta përdorni gjithmonë.

Vetë shablloni përbëhet nga simbole të rregullta dhe konstruksione të veçanta. Epo, për shembull, shkronja "k" në rreshta të rregullt do të thotë vetë, por simbolet do të thotë "në këtë vend mund të ketë çdo numër nga 0 në 5". Këtu është një listë e plotë e karaktereve speciale (ata quhen metakaraktere në manualin php), dhe të gjithë karakteret e tjera në regex janë normale:

Më poshtë do të analizojmë kuptimin e secilit prej këtyre simboleve (dhe gjithashtu do të shpjegojmë pse shkronja "ё" përkthehet veçmas në shprehjen e parë), por tani për tani le të përpiqemi të zbatojmë shprehjet tona të rregullta në tekst dhe të shohim se çfarë ndodh. Php ka një funksion të veçantë preg_match ($ regexp, $ text, $ match) që merr një model të rregullt, një tekst dhe një grup bosh si hyrje. Ai kontrollon nëse teksti përmban një nënvarg që përputhet me modelin e dhënë dhe kthen 0 nëse jo, ose 1 nëse ka një të tillë. Dhe në grupin e kaluar në elementin me indeks 0, vendoset përputhja e parë e gjetur me regex. Le të shkruajmë një program të thjeshtë që aplikon shprehje të rregullta në vargje të ndryshme:

Pasi të njihemi me shembullin, do të studiojmë më në detaje shprehjet e rregullta.

Kllapa në shprehje të rregullta

Le të përsërisim se çfarë nënkuptojnë llojet e ndryshme të kllapave:

  • Kllapat kaçurrelë a (1,5) specifikojnë numrin e përsëritjeve të karakterit të mëparshëm - në këtë shembull, shprehja kërkon 1 deri në 5 shkronja të njëpasnjëshme "a"
  • Kllapat katrore nënkuptojnë "ndonjë nga këto karaktere", në këtë rast shkronjat a, b, c, x, y, z ose një numër nga 0 në 5. Karaktere të tjera speciale si | ose * - ato përfaqësojnë një karakter të rregullt. Nëse simboli ^ është në fillim të kllapave katrore, atëherë kuptimi është i kundërt: "çdo një karakter, përveç atyre të specifikuara" - për shembull [^ a-c] do të thotë "çdo karakter përveç a, b ose c".
  • Në kllapa grupohen personazhet dhe shprehjet. Për shembull, në shprehjen abc + shenja plus i referohet vetëm shkronjës c dhe kjo shprehje kërkon fjalë si abc, abcc, abccc. Dhe nëse vendosni kllapat a (bc) + atëherë sasia plus i referohet sekuencës bc dhe shprehja kërkon fjalët abc, abcbc, abcbcbc

Shënim: në kllapa katrore, mund të specifikoni vargjet e karaktereve, por mbani mend se shkronja ruse ё shkon veçmas nga alfabeti dhe për të shkruar "çdo shkronjë ruse", duhet të shkruani [a-yayo].

Bexsles

Nëse keni parë mësime të tjera regex, me siguri keni vënë re se vija e prapme shkruhet ndryshe kudo. Diku shkruajnë një vijë të prapme: \ d, por këtu në shembujt përsëritet 2 herë: \\ d. Pse?

Gjuha e shprehjes së rregullt kërkon që ju të shkruani një herë vijën e prapme. Megjithatë, në vargjet e cituara të vetme dhe të dyfishta në PHP, vija e prapme ka gjithashtu një kuptim të veçantë: manuali për vargjet. Epo, për shembull, nëse shkruani $ x = "\ $"; atëherë PHP do ta interpretojë këtë si një kombinim të veçantë dhe do të fusë vetëm karakterin $ në varg (dhe motori regex nuk do të dijë për vijën e prapme përpara tij). Për të futur sekuencën \ $ në një varg, duhet të dyfishojmë vijën e prapme dhe të shkruajmë kodin si $ x = "\\ $"; ...

Për këtë arsye, në disa raste (ku një sekuencë karakteresh ka kuptim të veçantë në PHP) na kërkohet të dyfishojmë vijën e prapme:

  • Për të shkruar \ $ në regex, ne shkruajmë në kodin "\\ $"
  • Për të shkruar \\ në regex, ne dyfishojmë çdo vijë të prapme dhe shkruajmë "\\\\"
  • Për të shkruar një vijë të prapme dhe një numër (\ 1) në rrjetin e rregullt, vija e prapme duhet të dyfishohet: "\\ 1"

Në raste të tjera, një ose dy kthesa të pasme do të japin të njëjtin rezultat: "\\ d" dhe "\ d" do të fusin një palë \ d karaktere në varg - në rastin e parë 2 kthesa të kundërta janë një sekuencë për futjen e një vije të prapme. në rastin e dytë nuk ka sekuencë të veçantë dhe karakteret do të futen ashtu siç janë. Mund të kontrolloni se cilat karaktere janë futur në varg dhe çfarë shikon motori regex me echo: echo "\ $"; ... Po, është e vështirë, por çfarë mund të bësh?

Ndertime te vecanta ne rregulla

  • \ d kërkon për çdo shifër, \ D - çdo karakter përveç një shifre
  • \ w përputhet me çdo shkronjë të vetme (çdo alfabet), shifër ose nënvizim _. \ W përputhet me çdo karakter përveç shkronjës, numrit, nënvizimit.

Gjithashtu, ekziston një kusht i përshtatshëm për të treguar një kufi fjalësh: \ b. Ky ndërtim do të thotë që në njërën anë të tij duhet të ketë një karakter që është një shkronjë / numër / nënvizim (\ w), dhe në anën tjetër nuk është. Epo, për shembull, ne duam të gjejmë fjalën "mace" në tekst. Nëse shkruajmë regex / cat / ui, atëherë ajo do të gjejë sekuencën e këtyre shkronjave kudo - për shembull, brenda fjalës "bagëti". Është e qartë se kjo nuk është ajo që ne donim. Nëse shtojmë kushtin kufitar të fjalës në regex: / \ bcat \ b / ui, atëherë tani do të kërkohet vetëm fjala e veçantë "cat".

Manual

  • Sintaksa e shprehjes së rregullt të PHP, Përshkrimi i detajuar

) Ju tregova një shembull të përdorimit të shprehjeve të rregullta për të gjetur pjesë specifike të kodit burimor të një faqeje. Tani do të mësojmë se si t'i shkruajmë ato vetë. Kjo aftësi do t'ju ndihmojë të shkruani, të pastroni tekstin nga fragmentet e panevojshme, të kërkoni pjesët e nevojshme në vëllime të mëdha teksti, etj.

Kjo temë është mjaft e vështirë, por do të përpiqem të theksoj shkurtimisht pikat më të rëndësishme. Nuk e di sa mund ta bëj, por shpresoj që mësimi të jetë i dobishëm.
Pra, për të filluar, ekzistojnë disa funksione për të punuar me shprehje të rregullta në PHP, por tre përdoren më shpesh:

  • preg_replace - kërkoni dhe zëvendësoni tekstin që përputhet me shprehjen e rregullt;
  • preg_match - thjesht kërkim i rregullt;
  • preg_split - kërkoni dhe ndani tekstin.

Të paktën në mësimet e mëparshme i kemi përdorur ato. Përkundrazi, në vend të preg_match kishte preg_match_all, por kjo është në thelb e njëjta gjë, vetëm kjo e fundit nuk e ndërpret kërkimin pas gjetjes së parë. Kjo do të thotë, nëse përdorim preg_match, atëherë nuk do të gjejmë të gjitha dukuritë, por vetëm të parën.

Zgjedhja në cilën situatë të përdoret cili funksion është mjaft e thjeshtë. Ne duhet të zëvendësojmë - ne përdorim zëvendësimin, si në rastin kur na duhej të hiqnim pjesë të panevojshme të kodit të faqes, mbani mend?

$ faqe = preg_replace ("/ ^] / i "," ", $ faqe); $ faqe = preg_replace (" / ^] / i "," ", $ faqe); $ faqe = str_replace (""," ", $ faqe);

Parametri i parë i funksionit është një regex, i cili përcakton atë që ne kërkojmë. E dyta është ajo që ne po zëvendësojmë. E treta - Ku po kërkojmë. Prandaj, këtu morëm variablin $ page dhe ia caktuam rezultatin e funksionit preg_replace, ku kërkuam të gjitha tipet e hyrjes = kutitë e kontrollit, si dhe etiketat hapëse dhe mbyllëse. I zëvendësoi me ", domethënë thjesht i fshinë. Shpresoj se gjithçka është e qartë këtu. Do të kalojmë në analizën e vetë shprehjes (parametri i parë i funksionit) pak më vonë.
Kishte gjithashtu një shembull të përdorimit të preg_match_all, i cili ishte i dobishëm për të gjetur të gjitha lidhjet në pjesën tjetër të tekstit. Më pas na duheshin lidhje sepse ato përmbanin fjalë kyçe që analizuam. Ja çfarë ndodhi:

Preg_match_all ("/ ]+?>(.*?)<\/a>/ uis ", $ faqe, $ ok); për ($ j = 0; $ j ". $ ok [$ j].""; }

Parametri i parë, përsëri, është i rregullti, për të gjetur të gjitha lidhjet, të cilat natyrshëm janë të mbyllura në etiketën "a" (nëse nuk jeni miqësor me shënjimin html, atëherë lexoni atë). E dyta është një variabël që përmban tekstin me të cilin do të bëhet kërkimi. Parametri i tretë është një variabël, në të cilin vendoset rezultati - $ ok. Pas kësaj, mbetet vetëm të kalojmë nëpër të gjithë elementët e nevojshëm $ ok për të marrë çelësat që na duhen. Më vete, duhet thënë se në dalje marrim një grup shumëdimensional. Kjo është arsyeja pse ne e nxjerrim atë në një mënyrë kaq të ndërlikuar: $ ok [$ j]. Për të parë strukturën e grupit, përdorni funksionin më poshtë dhe do të kuptoni gjithçka.

Print_r ($ ok);

Këtu, me sa duket, kemi kuptuar funksionet që kemi përdorur për punë. Tani mbetet vetëm të mësojmë se si të shkruajmë këto shprehje shumë të rregullta, të cilat janë parametri i parë i secilës prej këtyre metodave. Le të kalojmë te gjëja më e rëndësishme.

Si të shkruani të rregullt

Së pari, le të hedhim një vështrim në ndërtimet bazë. Shprehjet kanë opsione. Ato përcaktohen me një shkronjë dhe shkruhen në fund, të paraprira nga një prerje.

Përveç kësaj, metakarakterët e mëposhtëm mbështeten:

Metakarakteret, nga ana tjetër, mund të kenë modifikues:

Epo, tani mund të kalojmë në analizën e të rregulltve tanë nga mësimi i fundit. Bazuar në tabletat e mësipërme, le të përpiqemi të kuptojmë se çfarë kemi. Këtu është shprehja:

/^] / i

Shenjat e para dhe të fundit "/" tregojnë se ka një shprehje të rregullt brenda tyre. Në të njëjtën kohë, pas të fundit vendosim "i", ky është një opsion, si në tabelën e parë - jo i ndjeshëm ndaj shkronjave të vogla. Brenda vijave të pjerrëta, vetë vija e rregullt. Fillon me një shenjë më pak se dhe një etiketë hyrëse, dhe gjithçka që pason deri në shenjën e pikës, e cila është tekst i thjeshtë për t'u kërkuar. Por vetë pika, dhe simbolet pas saj - kjo është tashmë më interesante. Në këtë rast, ndërtimi ". *?" nënkupton çdo sekuencë karakteresh. Kjo do të thotë, nëse kombinoni vetëm tekstin dhe konstruksionin e dhënë, atëherë ne do të zgjedhim të gjithë tekstin pas shfaqjes së parë deri në fund. Për të ndaluar, duhet të plotësoni ose etiketën html mbyllëse "më e madhe se", ose karakterin e linjës së re. Ky dizajn thjesht na jep këtë mundësi:

Simbolet në kllapa katrore janë, si të thuash, të lidhura me një OR logjik. Fundi është një shenjë më e madhe se fillimi i një rreshti.
Kjo është e gjithë shprehja, në të vendosim kushtin e fillimit, të mesit dhe të përfundimit. Jo e vështirë, apo jo? Këtu është një ilustrim për qartësi:

Le të zbërthejmë një tjetër për të ngurtësuar gjithçka. Ne i kërkuam ato për lidhje:

/]+?>(.*?)<\/a>/ uis

Lexojmë shprehjen. Përsëri, hidhni së pari prerjet dhe opsionet. Flamujt "uis" janë të kuptueshëm, përveç "u" që nuk e përshkrova - tregon se ne përdorim kodimin Unicode. Nuk ka mbetur shumë. Fillimi është etiketa "a", e cila hapet, pastaj vjen klasa

që do të thotë JO pak a shumë (hapja dhe mbyllja e etiketave html), domethënë ndonjë karakter në këtë rast. "+?" Shtohet në klasë, që do të thotë se kjo klasë do të jetë e pranishme 1 ose më shumë herë (por të paktën 1 herë me siguri). Dhe pastaj vjen etiketa mbyllëse html për etiketën "a". Brenda lidhjes ka tekst, i cili vendoset nga grupi

Në fund të fundit, ne nuk e dimë se çfarë lloj teksti do të jetë atje, kështu që ne përcaktojmë një grup të tillë. Dhe në fund, etiketa mbyllëse "a":

Ju lutemi vini re se ne po i shpëtojmë vijës së pjerrët me një vijë të prapme në mënyrë që të perceptohet si tekst i thjeshtë.

Fuh. Tema është me të vërtetë mjaft komplekse, kërkon praktikë. Ndoshta unë jam duke bërë diçka jo mjaft optimale dhe ju mund të krijoni shprehje të tjera të rregullta më korrekte, por unë jam i njëjti autodidakt si ju, ndaj mos gjykoni rreptësisht, por ndani opsionet tuaja në komente. Gjithashtu, nëse diçka nuk është e qartë - komentet dhe një faqe kontakti janë në shërbimin tuaj.

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ë karakteri, 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 rreshti i 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 do 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 për 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