Numbrite regulaaravaldis php. Kasulikud regulaaravaldised PHP jaoks. Põhjalik paroolikontroll


PHP keele üks väga võimsaid ja kasulikke omadusi on regulaaravaldiste tugi. Paljusid programmeerijaid, nii algajaid kui ka üsna kogenud, hirmutab regulaaravaldise keele väline keerukus ja keerukus. Kuid võin teile kinnitada, et see on seda väärt. Regulaaravaldiste kasutamine hõlbustab oluliselt tekstide ja lõdvalt struktureeritud andmete töötlemise tööd.


Regulaaravaldised on erikeeles kirjutatud avaldised.Ärge kartke, keel on üsna kergesti mõistetav, vajate vaid kogemust ja praktikat.


Arvan, et olete korduvalt kokku puutunud olukordadega, kui teil on tekst (näiteks Microsoft Wordis) ja teil on vaja sealt midagi olulist leida. Kui tead, mida otsid – kõik on lihtne: avasid otsingudialoogi, sisestasid otsingusõna, vajutasid nuppu ja voila – tekst leiti.


Aga mida teete, kui teate ette ainult seda, millist teavet otsite? Näiteks seisate silmitsi ülesandega leida paarisajalehelisest dokumendist kõik meiliaadressid. Mõned skannivad dokumendi käsitsi, mõned otsivad koera (@) ja otsivad seda. Nõus – mõlemad variandid on raske töö tänamatu töö.

Siin tulevad sisse regulaaravaldised. Mingil määral saab regulaaravaldisi võrrelda tekstile kantavate maskide või mustritega: kui tekst ühtib maskiga, on see soovitud fragment. Kuid enne regulaaravaldiste kasutamise kaalumist tutvume nende süntaksiga.

Regulaaravaldis on teatud seaduste ja reeglite järgi koostatud tekstistring. String koosneb tähemärkidest ja tähemärkide rühmadest, metamärkidest, kvantoritest ja modifikaatoritest.

Sümbolid on sel juhul mis tahes tähestiku sümbolid. Ja mitte ainult loetav. Võite avaldisesse sisestada loetamatu märgi, selleks peate teadma ainult selle koodi kuueteistkümnendsüsteemis. Näiteks:

// loetavad märgid a E // loetamatud märgid ja koodid \x41 - sama mis täht "A" \x09 - tabeldusmärk

Tähemärkide rühm koosneb mitmest järjestuses kirjutatud tähemärgist:

Abcg ACZms

Juhin teie tähelepanu kohe - ka "tühikut" regulaaravaldistes peetakse oluliseks märgiks, seega olge väljendite kirjutamisel ettevaatlik. Näiteks on need märgirühmad ERINEVAD väljendid:

ABCWHERE ABC WHERE

Järgmine keeleelement on metamärgid. Eesliide "meta" tähendab, et need sümbolid kirjeldavad mõnda muud sümbolit või nende rühmi. Tabelis käsitletakse regulaaravaldise keele peamisi metamärke:

Metamärgid erimärkide määramiseks
() Sulgudes. Pesastatud avaldiste määratlemine.
| Valiku metamärk
^ Rea alguse metamärk
$ Rea lõpu metamärk
\n Reavahetuse märk (kuueteistkümnendkood 0x0A)
\r Käru tagastusmärk (kuueteistkümnendkood 0x0D)
\t Tabeldusmärk (kuueteistkümnendkood 0x09)
\xhh Kuueteistkümnendkoodiga 0xhh märgi sisestamisel, näiteks \x42, lisatakse ladina täht "B"
Metamärgid märgirühmade määramiseks
. Punkt. Iga tegelane.
\d Arv (0-9)
\D Mitte number (ükskõik milline märk, välja arvatud tähemärgid 0-9)
\s Tühi märk (tavaliselt tühik ja tabeldusmärk)
\S Mittetühi märk (kõik peale \s metamärgiga tuvastatud märgid)
\w "Sõnastiku" märk (märk, mida kasutatakse sõnades. Tavaliselt kõik tähed, kõik numbrid ja allkriips ("_"))
\W Kõik peale \w metamärgiga määratletud märgid

Tabeli teise poole metamärke on väga lihtne meelde jätta. "d" - number (arv), "s" - sümbol (sümbol), "w" - sõna (sõna). Kui täht on suur, siis tuleb rühma kirjeldusse lisada "EI".

Võtame näiteks teksti "Punasel särgil on numbrid 1812 ja rohelisel särgil - 2009". Vaatleme näiteid kõige lihtsamatest regulaaravaldistest:

\d\d\d\d - vastab numbritele 1812 ja 2009 \D - sobib kõikidele tähtedele, tühikutele ja kirjavahemärkidele \s - sobib kõikidele tühikutele tekstis.

Kuid lõppude lõpuks saab meie näites aasta kirjutada mitte nelja, vaid kahe numbriga, sõnadel võib olla muid käändeid jne. Märkide alamhulgad, mis on määratud nurksulgudega, võivad siin abiks olla:

Tähendab mis tahes numbrit (sama mis \d) - tähendab paarisnumbrit - tähendab mis tahes tähemärki ladina tähest (igal juhul) või numbrit.

Näiteks avaldis \d\d\d teststringis leiab ainult 1812, mitte 2009. Seda avaldist tuleks lugeda järgmiselt: "otsi kõik neljakohalised jadad, mille viimane number on 0,2,4,6 või 8".

Peame mainima ainult kvantoreid ja modifikaatoreid.

Kvantifikaator on spetsiaalne konstruktsioon, mis määrab, mitu korda peab tegelane või tegelaste rühm esinema. Kvantori kirjutatakse lokkis sulgudes "()". Võimalikud on kaks salvestusvormingut: täpne ja vahemik. Täpne formaat on kirjutatud nii:

Siin on X, mitu korda eelnevat märki või rühma tuleb korrata. Näiteks väljend

Teine tähistusvorm on vahemik. Kirjutatud kui

(X, Y) // või (,Y) // või (X,)

kus X on minimaalne ja Y on maksimaalne korduste arv. Näiteks:

loetakse kui "kahest neljast järjestikusest numbrist". Kui üht piiri pole määratud, siis piirangut ei eeldata. Näiteks:

\w(3,) – kolm või enam tähte. \d(,5) - numbreid pole üldse või on, kuid mitte rohkem kui viis.

Kvantereid saab rakendada ühele märgile või rühmale:

[A-Zaa-Z](1,3)

See konstruktsioon valib tekstist kõik ühe-, kahe- või kolmetähelised venekeelsed sõnad (näiteks "või", "mitte", "mina", "ma lähen" jne).

Lisaks lokkis traksidele on olemas veel kolm kvantori metamärki: "*" (tärn), "+" (pluss) ja "?" (küsimus). Neid kasutatakse juhtudel, kui vajalike korduste minimaalne ja maksimaalne arv ei ole ette teada. Näiteks e-posti aadresse otsides ei saa te ette öelda, mitu tähemärki on kasutajanimes (enne sõna "koer") ja mitu tähemärki domeeninimes (pärast sõna "koer").

"*" metamärki loetakse kui "mis tahes arvu nullist või enamast", st. disain

määrab suvalise arvu järjestikuseid tähti, sealhulgas nende täielikku puudumist.

Märk "+" erineb tärnist ainult selle poolest, et selleks on vaja vähemalt ühte märki. Need. disain

sobib igale numbrijadale, kus on üks või mitu numbrit.

Sümbol "?" sobib ühe märgi puudumise või olemasoluga. Need. disain

sobib igale numbrijadale, kus on üks või kaks numbrit.

Siinkohal tasub mainida sellist antifiersi "*" ja "+" omadust nagu ahnus. Põhimõte on see, et vaikimisi vastavad need märgid võimalikult pikale tähemärkide jadale. Näiteks stringi "ema pesi raami" jaoks väljend:

valib "mom soap ra", mis on mõnevõrra ootamatu, kuna me pidime saama "ma". Selle käitumise muutmiseks kasutage metamärki "?" (küsimärk), mis on kirjutatud vahetult pärast kvantorit. See piirab kvantorite "isu", pannes need tagastama esimese, mitte kõige pikema vaste. Muudame nüüd eelmist näidet:

ja saada soovitud vaste "ma".

Keele viimane element on modifikaatorid. Modifikaator on erimärk, mis määrab regulaaravaldiste sõelumiseks "süsteemi" parameetrid. Selliseid sümboleid on ainult neli, neid saab kasutada nii eraldi kui ka samaaegselt:

i Võimaldab tõstutundlikku režiimi, st. suured ja väikesed tähed väljendis ei erine.
m Näitab, et otsitavat teksti tuleks käsitleda mitme reana. Vaikimisi käsitleb regulaaravaldise mootor teksti ühe reana, olenemata sellest, mis see tegelikult on. Vastavalt tähistavad metamärgid "^" ja "$" kogu teksti algust ja lõppu. Kui see modifikaator on määratud, osutavad nad vastavalt iga tekstirea algusesse ja lõppu.
s Vaikimisi metamärk on "." ei sisalda oma definitsioonis reavahetusmärki. Need. mitmerealise teksti puhul tagastab avaldis /.+/ ainult esimese rea, mitte kogu teksti, nagu oodatud. Selle modifikaatori määramine eemaldab selle piirangu.
U Muudab kõik kvantitatiivsed metamärgid vaikimisi "mitteahneks". Mõnes keele modifikatsioonis (eriti PHP-s) kasutatakse "U" asemel tähemärki "g", mis on tähendusele sobivam ("g" on ingliskeelsete "greedy", "greedy" lühend).

Tabelis on kõige populaarsemad ja vajalikumad regulaaravaldiste näited. Mõned neist võivad teile tunduda keerulised ja tülikad, kuid üksikasjaliku uuringuga saate sellest kahtlemata aru.

Regulaaravaldised PHP-s.

PHP regulaaravaldistega töötamiseks on ette nähtud erifunktsioonid, mille loetelu ja lühikirjeldus on toodud tabelis:

int preg_match(stringimuster, stringi teema[, massiivi vasted])

Funktsioon kontrollib, kas teema sisu vastab mustrile. Tagastab vastete leidmisel 1, vastasel juhul tagastab 0. Kui määrate valikulise massiivi parameetri vasted, siis funktsiooni täitmisel sisestatakse sellesse ainult üks element - esimene leitud vaste.

"; print_r($leitud); ?>

int preg_match_all(stringimuster, stringi teema, massiivi vasted[, sisejärjestus])
Funktsioon on identne eelmisega, ainsa erinevusega - see otsib läbi kogu teksti ja tagastab KÕIK leitud vasted vastete massiivist.
mix preg_replace (segamuster, kombineeritud asendus, segatud teema [, int limit])
Nagu kaks eelmist funktsiooni, otsib preg_replace tekstiosa, mis vastab mustrile. Funktsioon asendab kõik leitud fragmendid parameetrites määratud tekstiga.Enne puhastamist:\n$tekst\n\n"; $tekst = preg_replace("/(\n \s(2,))/"," ",$tekst); kaja " Pärast puhastamist:\n$text"; // kuvab teksti, mis on eemaldatud erimärkidest // ja lisatühikutest?>
segatud preg_replace_callback (segamuster, segatud tagasihelistus, segatud teema [, int limit])
Funktsioon on eelmise laiendatud versioon. Peamine erinevus seisneb selles, et parameetrites antakse sellele funktsioonile selle funktsiooni nimi, mis analüüsib teksti ja moodustab asendusteksti.
massiiv preg_split(stringimuster, stringi teema[, int limiit[, int lipud]])
See funktsioon on sarnane funktsioonidele explode() ja split(). Selle eripära on see, et eraldaja ei ole fikseeritud string, vaid regulaaravaldis. Funktsioon jagab sisendandmed elementideks ja asetab need väljundmassiivi.
preg_grep(stringimuster, massiivi sisend)
Funktsioon on mõeldud tavaliseks otsinguks massiivides. Otsingule antakse muster ja sisendandmete massiiv ning tagastatakse massiiv, mis koosneb ainult mustrile vastavatest elementidest.

Vaadeldavate funktsioonide loend pole kaugeltki täielik, kuid see on regulaaravaldiste edukaks alustamiseks täiesti piisav. Kui see teema huvitab, lugege kindlasti lisakirjandust (näiteks Friedli raamat "Regulaaravaldised"). Lisaks soovitan õppimise eesmärgil installida ühe regulaaravaldiste testimise spetsiaalsetest programmidest (näiteks "PCRE" või "RegEx Builder").

Mis tahes kaasaegses programmeerimiskeeles tekstidega töötades seisavad arendajad pidevalt silmitsi ülesannetega kontrollida sisestatud andmete vastavust soovitud mustrile, otsida ja asendada testfragmente ning muid tüüpilisi toiminguid sümboolse teabe töötlemiseks. Oma verifitseerimisalgoritmide väljatöötamine toob kaasa ajakadu, programmikoodi ühildamatuse ning selle arendamise ja moderniseerimise keerukuse.

Interneti- ja veebiarenduskeelte kiire areng nõudis tekstiteabe töötlemiseks universaalsete ja kompaktsete tööriistade loomist minimaalse koodikogusega. Algajate ja professionaalsete arendajate seas populaarne PHP keel pole erand. Regulaaravaldis tekstimalli keelena võimaldab lihtsustada tekstitöötluse ülesandeid ning vähendada programmikoodi kümnete ja sadade ridade võrra. Paljusid ülesandeid on üldiselt võimatu ilma selleta lahendada.

Regulaaravaldised PHP-s

PHP keel sisaldab kolme regulaaravaldistega töötamise mehhanismi – "ereg", "mb_ereg" ja "preg". Kõige tavalisem on "preg" liides, mille funktsioonid võimaldavad juurdepääsu PCRE regulaaravaldise tugiteegile, mis on algselt välja töötatud Perli keele jaoks, mis on komplektis PHP-ga. Preg-funktsioonid otsivad vasteid antud tekstistringis regulaaravaldise keele kindla mustri järgi.

Süntaksi põhitõed

Lühiartikli raames on võimatu üksikasjalikult kirjeldada kogu regulaaravaldiste süntaksit, selleks on spetsiaalne kirjandus. Anname ainult põhielemendid, et näidata arendajale laialdasi võimalusi ja mõista koodinäiteid.

B on formaalselt väga raske määratletud ja seetõttu lihtsustame kirjeldust. Regulaaravaldis on tekstistring. See koosneb piiritletud mustrist ja modifikaatorist, mis näitab, kuidas seda töödelda. Mallidesse on võimalik kaasata erinevaid alternatiive ja kordusi.

Näiteks väljendis /\d(3)-\d(2)-\d(2)/m eraldaja saab olema «/» , millele järgneb muster ja sümbol "m" saab olema modifikaator.

Regulaaravaldiste täielik võimsus on kodeeritud metamärkidega. Keele peamine metamärk on kaldkriips – "\". See pöörab sellele järgneva tegelase tüübi ümber (st tavalisest tähemärgist saab metamärk ja vastupidi). Teine oluline metamärk on kaldkriips "|", mis määrab alternatiivsed mustrid. Veel näiteid metamärkide kohta:

PHP käsitleb regulaaravaldiste töötlemisel tühikut eraldi tähendusliku märgina, seega on avaldised ABCWHERE ja ABCWHERE erinevad.

Alammustrid

PHP-s eristatakse tavalisi alammustreid sulgudega ja mõnikord nimetatakse neid "alaavaldisteks". Tehke järgmised funktsioonid:

    Alternatiivide valik. Näiteks mall kuumus(mingi|lind|) sobib sõnadega "kuumus", "tulelind" Ja "praadima". Ja ilma sulgudeta on see lihtsalt tühi string, "lind" ja "kuum".

    "Põnev" alammuster. See tähendab, et kui alamstring mustris kattub, tagastatakse kõik vasted. Selguse huvides toome näite. Arvestades järgmise regulaaravaldise: võitja saab ((kuld|kullatud)(medali|karika)) - ja string vastete otsimiseks: "võitja saab kuldmedali". Lisaks algsele fraasile annab otsing: "kuldmedal", "medal", "kuld".

Kordusoperaatorid (tähed)

Regulaaravaldiste koostamisel on väga sageli vaja analüüsida arvude ja märkide kordusi. See pole probleem, kui kordusi pole väga palju. Aga mida teha, kui me ei tea nende täpset arvu? Sel juhul tuleb kasutada spetsiaalseid metamärke.

Korduste kirjeldamiseks kasutatakse neljandike – metamärke koguse määramiseks. Kvalifitseerijaid on kahte tüüpi:

  • üldine, sulgudes;
  • lühendatud.

Üldkvantori määrab elemendi lubatud korduste minimaalse ja maksimaalse arvu kahe numbrina lokkis sulgudes, järgmiselt: x(2.5). Kui maksimaalne korduste arv on teadmata, jäetakse teine ​​argument välja: x(2,).

Lühendatud kvantorid on kõige tavalisemate korduste sümbolid, et vältida süntaksi ülekoormamist. Tavaliselt kasutatakse kolme lühendit:

1. * - null või enam kordust, mis võrdub (0,).

2. + - üks või mitu kordust, st).

3.? - null või ainult üks kordus - (0,1).

Regulaaravaldise näited

Neile, kes õpivad regulaaravaldisi, on näited parim õpetus. Siin on mõned, mis näitavad oma suurt potentsiaali minimaalse pingutusega. Kõik programmeerimiskoodid ühilduvad täielikult PHP 4.x ja uuemate versioonidega. Süntaksi täielikuks mõistmiseks ja keele kõigi võimaluste kasutamiseks soovitame J. Friedli raamatut Regular Expressions, kus süntaks on täielikult kaetud ja regulaaravaldiste näited mitte ainult PHP-s, vaid ka Pythonis, Perl, MySQL, Java, Ruby ja C#.

E-posti aadressi õigsuse kontrollimine

Ülesanne. Seal on veebileht, mis küsib külastajalt meiliaadressi. Regulaaravaldis peaks enne sõnumite saatmist kontrollima, kas vastuvõetud aadress on õige. Kontroll ei garanteeri, et määratud postkast on tõesti olemas ja võtab kirju vastu. Kuid ta suudab tahtlikult valed aadressid välja rookida.

Lahendus. Nagu iga programmeerimiskeele puhul, saab e-posti aadressi kontrollimise regulaaravaldisi PHP-s rakendada mitmel viisil ja selles artiklis toodud näited ei ole mõeldud olema lõplikud ega ainsad. Seetõttu anname igal konkreetsel juhul välja nimekirja nõuetest, millega programmeerimisel tuleb arvestada ja konkreetne teostus sõltub täielikult arendajast.

Seega peaks meili kehtivust kontrolliv avaldis kontrollima järgmisi tingimusi:

  1. @-sümboli olemasolu lähtestringis ja tühikute puudumine.
  2. Aadressi domeeniosa pärast sümbolit @ sisaldab ainult domeeninimede jaoks kehtivaid märke. Sama kehtib ka kasutajanime kohta.
  3. Kasutajanime kinnitamisel on vaja tuvastada erimärkide olemasolu, näiteks ülakoma või apostroofi. Need märgid on potentsiaalselt ohtlikud ja võivad sisalduda rünnakutes, näiteks SQL-i süstides. Vältige selliseid aadresse.
  4. Kasutajanimed lubavad ainult ühte punkti, mis ei saa olla stringi esimene ega viimane märk.
  5. Domeeninimi peab sisaldama vähemalt kahte ja mitte rohkem kui kuut tähemärki.

Näide, mis võtab arvesse kõiki neid tingimusi, on näha alloleval joonisel.

URL-ide kinnitamine

Ülesanne. Kontrollige, kas antud tekstistring on kehtiv Jällegi, URL-i valideerimise regulaaravaldisi saab rakendada mitmel viisil.

Lahendus. Meie lõplik versioon näeb välja selline:

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

Nüüd analüüsime selle komponente joonise abil üksikasjalikumalt.

Krediitkaardi numbrite kontrollimine

Ülesanne. Enamlevinud maksesüsteemide sisestatud plastkaardinumbri õigsuse kontrollimine on vajalik. Kaalutud on ainult kaardi võimalus

Lahendus. Avaldise loomisel tuleb arvestada võimaliku tühikute esinemisega sisestatud numbris. Kaardil oleva numbri numbrid on lugemise ja dikteerimise hõlbustamiseks jagatud rühmadesse. Seetõttu on täiesti loomulik, et inimene võib proovida numbrit sel viisil sisestada (st tühikuid kasutades).

Võimalikke tühikuid ja sidekriipse arvesse võtva üldavaldise kirjutamine on keerulisem kui lihtsalt kõigi märkide, välja arvatud numbrite, kõrvalejätmine. Seetõttu on avaldises soovitatav kasutada metamärki /D, mis eemaldab kõik märgid peale numbrite.

Nüüd saate minna otse numbri kontrollimise juurde. Kõik krediitkaardifirmad kasutavad ainulaadset numbrivormingut. Näidis kasutab seda ja klient ei pea sisestama ettevõtte nime – selle määrab number. Visa kaardid algavad alati 4-ga ja on 13- või 16-kohalised. MasterCard algab vahemikus 51-55 numbri pikkusega 16. Selle tulemusena saame järgmise avaldise:

Enne tellimuse vormistamist saate täiendavalt kontrollida numbri viimast numbrit, mis arvutatakse Luhni algoritmi abil.

Telefoninumbrite kontrollimine

Ülesanne. Sisestatud telefoninumbri õigsuse kontrollimine.

Lahendus. Laua- ja mobiiltelefoninumbrite numbrite arv on riigiti märkimisväärselt erinev, mistõttu ei ole võimalik telefoninumbrit regulaaravaldiste abil universaalselt kinnitada. Kuid rahvusvahelistel numbritel on range formaat ja need sobivad suurepäraselt mustri kontrollimiseks. Veelgi enam, üha rohkem riiklikke telefonioperaatoreid püüab järgida ühtset standardit. Numbri struktuur on järgmine:

+CCC.NNNNNNNNNNxEEEE, Kus:

C on 1-3-kohaline riigikood.

N - kuni 14-kohaline number.

E on valikuline laiend.

Plussmärk on nõutav element ja x-märk on olemas ainult siis, kui on vaja laiendust.

Selle tulemusena saame järgmise väljendi:

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

Numbrid vahemikus

Ülesanne. Tuleb tagada, et täisarv teatud vahemikust ühtiks. Lisaks on vajalik, et regulaaravaldised leiaksid ainult numbreid väärtusvahemikust.

Lahendus. Siin on mõned väljendid kõige levinumate juhtumite kohta:

IP-aadressi otsimine

Ülesanne. Peate kindlaks määrama, kas antud string on kehtiv IPv4-vormingus IP-aadress vahemikus 000.000.000.000-255.255.255.255.

Lahendus. Nagu iga PHP ülesande puhul, on regulaaravaldisel palju variatsioone. Näiteks see:

Avaldiste veebikontroll

Regulaaravaldiste õigsuse kontrollimine võib algajatele programmeerijatele keeruliseks osutuda süntaksi keerukuse tõttu, mis erineb "tavalistest" programmeerimiskeeltest. Selle probleemi lahendamiseks on palju veebipõhiseid väljenditestijaid, mis muudavad loodud malli õigsuse kontrollimise lihtsaks päristeksti peal. Programmeerija sisestab kontrollimiseks avaldise ja andmed ning näeb koheselt töötlemise tulemust. Tavaliselt on seal ka viiteosa, kus on üksikasjalikult kirjeldatud regulaaravaldisi, näiteid ja teostuserinevusi enamlevinud programmeerimiskeelte jaoks.

Kuid võrguteenuste tulemuste täielik usaldamine ei ole kõigile PHP-d kasutavatele arendajatele soovitatav. Kirjutatud ja isiklikult testitud regulaaravaldis parandab oskusi ja tagab, et vigu ei esine.

1,6 000

Regulaaravaldised (lühendatult regex) on märgijadad, mis moodustavad otsingumustreid. Neid kasutatakse peamiselt stringide sobitamise mustrites.

Novell

  • Kõik sai alguse 1940. ja 1960. aastatel, kui paljud targad inimesed rääkisid regulaaravaldistest;
  • 1970. aastad g/re/p;
  • 1980 Perl ja Henry Spencer;
  • 1997 PCRE (Perliga ühilduvad regulaaravaldised). Siis sai alguse nn regulaaravaldiste esilekerkimine. PCRE pakub teeke peaaegu iga keele jaoks.

Regulaaravaldiste tavaline kasutamine PHP-s

PHP sisaldab kolme peamist funktsiooni PCRE-ga töötamiseks - preg_match, preg_match_all ja preg_replace.

Matši võrdlus

Avaldis tagastab 1, kui vaste leitakse, 0, kui mitte, ja väär, kui ilmneb viga:

int preg_match (string $muster, string $subject [, massiiv &$vastab [, int $lipud = 0 [, int $nihe = 0 ]]])

Regulaaravaldise näide, mis tagastab leitud vastete arvu:

int preg_match_all (string $muster, string $subject [, massiiv &$sobib [, int $lipud = PREG_PATTERN_ORDER [, int $nihe = 0 ]]])

Asendamine

Avaldis tagastab asendatud stringi või massiivi ( $subjecti alusel):

mix preg_replace (sega $muster, sega $asendus, sega $subject [, int $limit = -1 [, int $count ]])

Regulaaravaldiste tavaline kasutamine JavaScriptis

JavaScripti regulaaravaldised näevad välja peaaegu samasugused kui PHP-s.

Matši võrdlus

Tagastab vastete massiivi või nulli, kui vasteid ei leitud:

string.match(RegExp);

Asendamine

Regulaaravaldis, mis tagastab stringi tehtud asendustega:

string.replace(RegExp, asendus);

JavaScripti regulaaravaldiste omadused

  • Punkt ei vasta kunagi reavahetusele:
  • Regulaaravaldise kaudu sobitamiseks ja asendamiseks samad meetodid kui ilma nendeta.

Regulaaravaldise mustri põhimõtted

Vaatame näidet, kus peame koodibaasist leidma meiliaadressid. Meie eesmärk:

Analoogpistikud

Regulaaravaldised koosnevad kahte tüüpi tähemärkidest:

  • Erisümbolid: ? * + () () ^ $ / .
  • Literaalid.

Mõelge sisendnööridele kui poltidele ja mallile kui nende pistikute komplektile (sobivas järjekorras).

Erisümbolid

Regulaaravaldiste kontrollimisel peate teadma, kuidas erimärgid töötavad:

  • Kaldkriips \ võib regulaaravaldises asendada mõne muu erimärgi:
  • Punkt ja w - .

Sobib kõikidele märkidele, välja arvatud reavahetused. Kui soovite kontrollida, kas punkt on ja ainult punkt - , tähtede, numbrite ja allkriipsude jaoks - w

  • Nurksulud .

Sobib sulgudes olevate tähemärkidega. Toetab vahemikke. Mõned näited:
o – sobib mis tahes a, b või c.
o suured tähed.
o mis tahes number.
o – sobib mis tahes väike- või suurtähtedega.
Valikuline? Sobi 0 või 1.
Tärn *.

Tärn tähistab 0 või enamat märki.

Sobitage 1 või enam tähemärki.

Lokkis traksid ().

Miinimum- ja maksimumväärtused. Mõned regulaaravaldise süntaksi näited:
o (1,) vähemalt 1.
o (1,3) 1 kuni 3.
o (1,64) 1 kuni 64.

Lisame selle kõik, et saada e-posti aadresside jaoks regulaaravaldis:

/[e-postiga kaitstud]+(.+)*/i


Kuidas see PHP-s välja näeb:

preg_match_all("/ [e-postiga kaitstud]+(.+)*/i", $sisendi_read, $väljundi_massiiv);

Regulaaravaldise kasutamine valideerimiseks

Väljakutse: veenduge, et sisend oleks see, mida ootame. 1. eesmärk: /[^w$.]/ 2. eesmärk: /^(1,2)$/

Regulaaravaldised sobivad hästi elementide leidmiseks, kuid sa pead teadma, mida otsid.

Millal ei tohiks valideerimiseks regulaaravaldist kasutada?

Paljusid juhtumeid saab paremini käsitleda PHP filtri_var funktsiooniga. Näiteks e-posti aadressi kinnitamiseks tuleks kasutada PHP sisseehitatud filtreid:

filter_var(" [e-postiga kaitstud]", FILTER_VALIDATE_EMAIL)

Valideerimine regulaaravaldistega

Rea lõpus olevad regulaaravaldised kasutavad ankruid:

^ - näitab rea algust.
$ on dollarimärk, mis näitab rea lõppu.

if (!preg_match("%^(1,2)$%", $_POST["tellimuse_sagedus"])) ( $isError = true; )

Välistatud tegelasklassid

[^abc] on kõike muud kui a , b või c , sealhulgas reavahetused.

Näide, mis sisaldab ainult tähtnumbrilisi märke, sidekriipse, punkte ja allkriipse:

if (preg_match("/[^0-9a-z-_.]/i", $tootekood)) ( $isError = true; )

Otsi ja asenda

Kõige tavalisemad PCRE funktsioonid otsingu ja asendamise teostamiseks on preg_replace() ja preg_replace_callback() . Kuid on ka preg_filter() ja preg_replace_callback_array() , mis teevad peaaegu sama asja. Pange tähele, et funktsioon preg_replace_callback_array() on saadaval alates PHP7-st.

Asendage loendis olevad sõnad

$subject = "Ma tahan õunu süüa."; echo preg_replace("/õun|banaan|apelsin/", "puuvili", $teema);

Tulemus

Ma tahan süüa puuvilju.

Kui regulaaravaldis sisaldab alammustreid ( sulgudes), saate asendada $N või N (kus N on täisarv >= 1), nimetatakse seda tagasilingiks.

Kahe arvu permutatsioon

$subject = "7/11"; echo preg_replace("/(d+)/(d+)/", "$2/$1", $subject);

Tulemus

Kuupäeva vormingu muutmine

$subject = "2001-09-11"; echo preg_replace("/(d+)-(d+)-(d+)/", "$3/$2/$1", $subject);

Tulemus

Lihtne näide URL-i asendamisest märgendis

$subject = "Rohkemate artiklite vaatamiseks külastage aadressi https://php.earth/doc."; echo preg_replace("#(https?://([^s./]+(?:[^s./]+)*[^s]*))#i", "$2", $subject) ;

Tulemus

PHP regexp on võimas mustrite sobitamise algoritm, mida saab teha ühe lausega. PHP regulaaravaldised kasutavad keerukate avaldiste loomiseks aritmeetilisi operaatoreid (nt +, -, ^ ).

Milleks regulaaravaldisi kasutatakse:

  • Regulaaravaldised muudavad stringiandmete tuvastamise lihtsaks, kutsudes välja ühe funktsiooni. See säästab aega koodi kirjutamisel;
  • Kui kontrollite kasutaja sisestatud andmeid, nagu e-posti aadress, veebisaidi domeen, telefoninumber, IP-aadress;
  • Märksõnade esiletõstmine otsingutulemustes;
  • Regulaaravaldisi saab kasutada siltide tuvastamiseks ja asendamiseks.

Regulaaravaldised PHP-s

PHP sisaldab sisseehitatud funktsioone, mis võimaldavad teil töötada regulaaravaldistega. Nüüd vaatame tavaliselt kasutatavaid PHP regulaaravaldise funktsioone.

  • preg_match kasutatakse stringi mustrite sobitamiseks. See tagastab tõese, kui vaste leitakse, ja false, kui vastet ei leitud;
  • preg_split – kasutatakse stringi poolitamiseks mustri järgi, tulemus tagastatakse numbrimassiivina;
  • preg_replace – kasutatakse mustri järgi otsimiseks ja määratud stringiga asendamiseks.

Järgmine on regulaaravaldise funktsioonide süntaks, nagu preg_match, preg_split või PHP regexp asenda:

"funktsiooni_nimi" on kas preg_match või preg_split või preg_replace .
"/.../" – kaldkriipsud tähistavad regulaaravaldise algust ja lõppu.
"'/pattern/"" on muster, mille peame sobitama.
"objekt" on string, mille järgi muster tuleb sobitada.

Vaatame nüüd praktilisi näiteid ülalmainitud funktsioonide kasutamisest.

Preg_match

Esimene näide kasutab funktsiooni preg_match, et sooritada antud URL-is olevale sõnale guru lihtne mustrivaste.

Allolev kood näitab selle näite teostust:


Mõelge koodi sellele osale, mis vastutab väljundi eest "preg_match('/guru/', $minu_url)".

"preg_match(...)" on PHP vaste regexpi funktsioon.
"'/Guru/"" on regulaaravaldise muster.
"$My_url" on muutuja, mis sisaldab vastendatavat teksti.

preg_split

Vaatame veel ühte näidet, mis kasutab funktsiooni preg_split.

Võtame fraasi ja jagame selle massiiviks; muster on mõeldud ühe ruumi otsimiseks:

Preg_replace

Mõelge funktsioonile preg_replace , mis teostab mustri vaste ja asendab leitud tulemuse teise stringiga.

Allolev kood otsib stringist sõna guru. See asendab selle css-koodiga, mis määrab taustavärvi:

Guru", $tekst); kaja $tekst; ?>

Metategelased

Ülaltoodud näidetes kasutati lihtsaid malle. Metamärgid võimaldavad keerukamat PHP regexpi mustri sobitamist, näiteks meiliaadressi kinnitamist. Mõelge sagedamini kasutatavatele metamärkidele.

metategelane Kirjeldus Näide
. Vastab mis tahes üksikule märgile, välja arvatud reavahetusmärk. /./ – kõik, mis sisaldab ühte märki.
^ Tähistab rea algust, välja arvatud märk /. /^PH/ on mis tahes rida, mis algab tähega PH.
$ Määrab mustri rea lõpus. /com$/ - guru99.com, yahoo.com jne.
* Tähistab suvalist märkide arvu, null või rohkem. /com*/ - arvuti, side jne.
+ Metatähemärgi(te)le eelneb vähemalt üks kord. /yah+oo/ - yahoo.
Kilbi sümbol. /yahoo+.com/ – käsitleb punkti sõnasõnalise väärtusena.
[…] Karakteriklass. // - abc.
a-z Tähistab väiketähti. /a-z/ - lahe, õnnelik jne.
A-Z Tähistab suurtähti. /A-Z/ - MIDA, KUIDAS, MIKS jne.
0-9 Tähistab mis tahes numbreid vahemikus 0 kuni 9. /0-4/ — 0,1,2,3,4.

Vaatame nüüd keerulist PHP regexpi näidet, mis kontrollib, kas meiliaadress on kehtiv:

Tulemus: meiliaadress [e-postiga kaitstud] on kehtiv.

Malli seletus " [e-postiga kaitstud]+.(2,5)$/]"

"'/…/"" alustab ja lõpetab regulaaravaldise.
"^" sobib kõikidele väike- või suurtähtedele, numbritele 0 kuni 9 ning punktidele, allkriipsudele või sidekriipsudele.
« [e-postiga kaitstud]' vastab märgile @, millele järgnevad väikesed või suurtähed, numbrid 0 kuni 9 või sidekriipsud.
"+.(2,5)$/" tähistab punkti, kasutades kaldkriipsu, millele järgneb väike- või suurtäht, märkide arv stringi lõpus peab olema vahemikus 2 kuni 5.