Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Savjet
  • Regularni izraz php četiri riječi napisane. Regularni izrazi (obrasci)

Regularni izraz php četiri riječi napisane. Regularni izrazi (obrasci)

Najčešća upotreba regularnih izraza u Perlu je u operatorima pretraživanja i zamjene kao što su s//, m/, konektivni operateri =~ ili != itd. Po pravilu, svi ovi operateri imaju slične opcije kao što su:

Obično su sve ove opcije označene kao "/x". Mogu se koristiti čak i unutar šablona koristeći novu konstrukciju (?...)

Regularni izrazi ili obrasci su isti kao procedure regexp u Unixu. Izrazi i sintaksa su posuđeni iz slobodno distribuiranih V8 procedura Henryja Spensera, gdje su detaljno opisani.

Predlošci koriste sljedeće metaznakove (znakove koji označavaju grupe drugih znakova) koji se često nazivaju egrep standardom:

Metaznakovi imaju modifikatore (napisane nakon metaznaka):

U svim ostalim slučajevima, vitičaste zagrade se smatraju običnim (regularnim) znakovima. Dakle, "*" je ekvivalentno (0,) , "+" je (1,) i "?" - (0,1). n i m ne mogu biti veći od 65536.

Po defaultu, metaznakovi su pohlepni. Podudaranje se propagira što je više moguće puta, bez uzimanja u obzir efekta narednih metakaraktera. Ako želite da im „smanjite apetit“, koristite simbol „?“. Ovo ne mijenja značenje metakaraktera, već samo smanjuje propagaciju. ovako:

Zamjenski znakovi rade na isti način kao dvostruki navodniki, tako da možete koristiti `\` - znakove (znakove obrnute kose crte) u njima:

\t - tab znak
\n - nova linija
\r - povratak kočije
\A - format prevoda
\v - vertikalna tabela
\a - zovi
\e - bijeg
\033 - oktalna notacija simbola
\x1A - heksadecimalno
\c[ - kontrolni simbol
\l - sljedeći znak malim slovima
\u - velika slova -//-
\L - svi likovi mala slova do \E
\U - u gornjem -//-
\E - ograničavač promjene registra
\Q - poništite akciju kao metaznak

Dodatno, u Perl su dodani sljedeći metaznakovi:

Imajte na umu da je sve ovo "jedan" karakter. Koristite modifikatore da naznačite sekvencu. dakle:

Osim toga, postoje imaginarni metakarakteri. Označavanje nepostojećih simbola na mjestu gdje se vrijednost mijenja. kao što su:

Granica riječi (\b) je zamišljena tačka između znakova \w i \W. Unutar klase znakova, "\b" predstavlja znak za povratak. Metakarakteri \A I \Z- slični su "^" i "$", ali ako početak reda "^" i kraj reda "$" djeluju za svaki red u višelinijskom nizu, tada \A I \Z označava početak i kraj čitavog višelinijskog niza.

Ako se grupisanje (zagrade) koristi unutar obrasca, tada se broj podniza grupe označava kao "\digit". Imajte na umu da se nakon uzorka unutar izraza ili bloka ove grupe označavaju kao "$digit". Osim toga, tu su i dodatne varijable:

primjer:

$s = "Jedan 1 dva 2 i tri 3"; if ($s =~ /(\d+)\D+(\d+)/) ( ispisati "$1\n"; # Rezultat "1" ispisati "$2\n"; # "2" ispisati "$+\n" ; # "2" ispiši "$&\n"; # "1 dva 2" ispiši "$`\n"; # "Jedan " ispiši "$"\n"; # " i tri 3" )

Perl verzija 5 sadrži dodatne konstrukcije šablona:

primjer:

$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Pronađite broj iza kojeg slijedi "-" ( ispisati "$1\n"; # Rezultat "2" ) else ( ispisati "greška pretraživanja\n" ; )

(?! obrazac) - “gledanje” naprijed negacijom:

primjer:

$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Pronađite cifru iza koje nema "+" ( ispisati "$1\n"; # Rezultat "2" ) else ( ispisati "traži greška\ n";)

(?ismx) - “interni” modifikatori. Pogodno je koristiti u predlošcima, gdje, na primjer, trebate navesti modifikator unutar predloška.

Pravila regularnog izraza. (regularni izraz)

  1. Bilo koji lik predstavlja sebe osim ako nije metaznak. Ako treba da poništite efekat metaznaka, stavite "\" ispred njega.
  2. Niz znakova označava niz ovih znakova.
  3. Gomila mogući likovi(klasa) je zatvorena u uglastim zagradama "", to znači da u ovo mjesto može biti jedan od znakova navedenih u zagradama. Ako je prvi znak u zagradama “^”, tada se nijedan od navedenih znakova ne može pojaviti u ovom trenutku u izrazu. Unutar klase možete koristiti simbol "-" za označavanje raspona znakova. Na primjer, a-z je jedno od malih slova latinica, 0-9 - broj, itd.
  4. PHP portal forum. S.U.

Regularni izrazi su posebni obrasci za traženje podnizova u tekstu. Uz njihovu pomoć možete riješiti sljedeće probleme u jednom redu: "provjeriti da li niz sadrži brojeve", "pronađi sve email adrese", "zamijenite nekoliko uzastopnih upitnika jednim."

Počnimo s jednom popularnom programskom mudrošću:

Neki ljudi, kada se suoče s problemom, pomisle: „Da, pametan sam, riješit ću to pomoću regularnih izraza.“ Sada imaju dva problema.

Primjeri šablona

Počnimo sa parom jednostavni primjeri. Prvi izraz na slici ispod traži niz od 3 slova, gdje je prvo slovo "k", drugo je bilo koje Rusko pismo a treći je "t" bez obzira na velika i mala slova (npr. "mačka" ili "CAT" odgovara ovom obrascu). Drugi izraz pretražuje tekst za vrijeme u formatu 12:34.

Svaki izraz počinje znakom za razdvajanje. Simbol / se obično koristi kao on, ali možete koristiti i druge simbole koji nemaju posebnu svrhu u regularnim izrazima, na primjer, ~, # ili @. Alternativni graničnici se koriste ako se u izrazu može pojaviti znak /. Onda on sam ode linijski uzorak, koju tražimo, nakon čega slijedi drugi graničnik i na kraju može biti jedno ili više slova zastavice. Pitaju dodatne opcije prilikom traženja teksta. Evo primjera zastava:

  • i - kaže da pretraga treba biti neosjetljiva na velika i mala slova (podrazumevano osjetljiva na velika i mala slova)
  • u - kaže da izraz i tekst koji se traže koriste utf-8 kodiranje, a ne samo pisma. Bez toga, pretraga za ruskim (i bilo kojim drugim nelatinskim) znakovima možda neće raditi ispravno, pa ga uvijek trebate postaviti.

Sam šablon se sastoji od običnih znakova i posebnih konstrukcija. Pa, na primjer, slovo "k" u regularnim izrazima znači samo sebe, ali simboli znače "bilo koji broj od 0 do 5 može biti na ovom mjestu." Evo puna lista specijalni znakovi(u php priručniku se zovu metaznakovi), a svi ostali znakovi u regularnom nizu su obični:

U nastavku ćemo analizirati značenje svakog od ovih znakova (i objasniti zašto je slovo „e“ odvojeno u prvom izrazu), ali za sada pokušajmo primijeniti naše regularne izraze na tekst i vidjeti što se događa. Postoji u php posebna funkcija preg_match($regexp, $text, $match) , koji uzima regularni izraz, tekst i prazan niz kao ulaz. Provjerava da li tekst sadrži podniz koji se podudara ovaj šablon i vraća 0 ako nije, ili 1 ako postoji. A u proslijeđenom nizu, prvo pronađeno podudaranje s regularnim nizom se stavlja u element s indeksom 0. Napišimo jednostavan program koji primjenjuje regularne izraze na različite nizove:

Nakon što pogledamo primjer, proučimo regularne izraze detaljnije.

Zagrade u regularnim izrazima

Hajde da ponovimo šta oni znače različite vrste zagrade:

  • Proteze a(1,5) specificira broj ponavljanja prethodnog znaka - u ovom primjeru izraz traži 1 do 5 uzastopnih slova “a”
  • Uglaste zagrade znače "bilo koji od ovih znakova", u u ovom slučaju- slova a, b, c, x, y, z ili brojevi od 0 do 5. Ostali specijalni znakovi poput | ne rade unutar uglastih zagrada. ili * - označavaju regularni simbol. Ako se u uglastim zagradama na početku nalazi znak ^, onda se značenje mijenja u suprotno: "bilo koji znak osim onih koji su naznačeni" - na primjer [^a-c] znači "jedan bilo kog karaktera, osim a, b ili c."
  • Okrugle zagrade grupni simboli i izrazi. Na primjer, u izrazu abc+, znak plus se odnosi samo na slovo c i ovaj izraz traži riječi poput abc, abcc, abccc. A ako stavite zagrade a(bc)+, tada se kvantifikator plus odnosi na niz bc i izraz traži riječi abc, abcbc, abcbcbc

Napomena: možete navesti opsege znakova u uglastim zagradama, ali zapamtite da je rusko slovo e odvojeno od abecede i da biste napisali „bilo koje rusko slovo“ morate napisati [a-âe].

Bexslashes

Ako ste pogledali druge tutorijale o regularnim izrazima, vjerovatno ste primijetili da se obrnuta kosa crta svuda drugačije piše. Negdje pišu jednu obrnutu kosu crtu: \d , ali ovdje se u primjerima ponavlja 2 puta: \\d . Zašto?

Jezik regularnog izraza zahtijeva da jednom napišete obrnutu kosu crtu. Međutim, u redovima u jednom i dvostruki navodnici u PHP-u obrnuta kosa crta takođe ima posebno značenje: priručnik o stringovima. Pa, na primjer, ako napišete $x = "\$"; onda će PHP ovo tretirati kao posebnu kombinaciju i umetnuti samo znak $ u string (a mehanizam regularnih izraza neće znati za obrnutu kosu crtu ispred njega). Da bismo umetnuli niz \$ u string, moramo udvostručiti obrnutu kosu crtu i napisati kod kao $x = "\\$"; .

Iz tog razloga, u nekim slučajevima (gde niz znakova ima posebno značenje u PHP-u) od nas se traži da udvostručimo obrnutu kosu crtu:

  • Da bismo napisali \$ u regularnom izrazu, pišemo "\\$" u kodu
  • Da bismo napisali \\ u regularnom izrazu, dupliramo svaku obrnutu kosu crtu i pišemo "\\\\"
  • Da biste napisali obrnutu kosu crtu i broj (\1) u redovnom formatu, trebate udvostručiti obrnutu kosu crtu: "\\1"

U drugim slučajevima, jedna ili dvije obrnute kose crte će dati isti rezultat: "\\d" i "\d" će ubaciti par znakova \d u red - u prvom slučaju, 2 obrnute kose crte su niz za umetanje obrnute kose crte , u drugom slučaju nema posebnog niza i znakovi će biti umetnuti takvi kakvi jesu. Možete provjeriti koji će znakovi biti umetnuti u string i šta će vidjeti mehanizam regularnih izraza koristeći echo: echo "\$"; . Da, teško je, ali šta možete učiniti?

Specijalni dizajni u redovnoj sezoni

  • \d traži bilo koju cifru, \D - bilo koji znak osim cifre
  • \w odgovara bilo kojem slovu (bilo koje abecede), broju ili donjoj crti _ . \W odgovara bilo kojem znaku osim slova, broja ili donje crte.

Takođe, postoji pogodan uslov za označavanje granice reči: \b . Ova konstrukcija znači da na jednoj strani treba biti znak koji je slovo/broj/podvlaka (\w), a na drugoj strani znak koji nije. Pa, na primjer, želimo da pronađemo riječ "mačka" u tekstu. Ako napišemo regularni izraz /cat/ui, on će pronaći niz ovih slova bilo gdje - na primjer, unutar riječi "stoka". Ovo očigledno nije ono što smo želeli. Ako u regularni izraz dodamo granični uvjet: /\bcat\b/ui, tada će se pretraživati ​​samo samostalna riječ “mačka”.

Manual

) Pokazao sam vam primjer korištenja regularnih izraza za pronalaženje određene komade izvorni kod stranice. Sada ćemo naučiti kako ih sami napisati. Ova vještina će vam pomoći da pišete, čistite tekst od nepotrebnih fragmenata, tražite potrebne dijelove u velikim količinama teksta i tako dalje.

Ova tema je prilično komplikovana, ali pokušaću ukratko da pokrijem većinu važne tačke. Ne znam koliko ću biti uspješan, ali nadam se da će lekcija biti korisna.
Dakle, počnimo s činjenicom da postoji nekoliko funkcija za rad s regularnim izrazima u PHP-u, ali tri se najčešće koriste:

  • preg_replace - potražite i zamijenite odgovarajući regularni izraz tekst;
  • preg_match - samo redovna pretraga;
  • preg_split - pretraži i podijeli tekst.

By najmanje, u prethodnim lekcijama koristili smo upravo njih. Tačnije, umjesto preg_match postojao je preg_match_all, ali to je u suštini ista stvar, samo što ovo drugo ne prekida pretragu nakon prvog pronalaska. To jest, ako koristimo preg_match, nećemo pronaći sve pojave, već samo prvu.

Odabir funkcije u kojoj situaciji je prilično jednostavan. Moramo zamijeniti - koristimo zamjenu, kao u slučaju kada smo trebali ukloniti nepotrebne dijelove koda stranice, sjećate se?

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

Prvi parametar funkcije je regularni znak koji određuje ono što tražimo. Drugo je ono čime ga zamjenjujemo. Treće - Gdje gledamo? Stoga smo ovdje uzeli varijablu $page i dodijelili joj rezultat funkcije preg_replace gdje smo tražili sve unose type=checkbox, kao i oznake za otvaranje i zatvaranje. Zamijenili su ih sa ", odnosno jednostavno su ih izbrisali. Nadam se da je ovde sve jasno. Na analizu samog izraza (prvog parametra funkcije) preći ćemo malo kasnije.
Postojao je i primjer korištenja preg_match_all, koji je bio koristan za pronalaženje svih veza u preostalom tekstu. Tada su nam bile potrebne veze jer su sadržavale ključne riječi, koji smo analizirali. Evo šta se dogodilo:

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

Prvi parametar je opet regularni izraz za pronalaženje svih veza koje su prirodno zatvorene u oznaci "a" (ako niste upoznati sa html markiranjem, pročitajte). Druga je varijabla koja sadrži tekst koji će se pretraživati. Treći parametar je varijabla u koju se stavlja rezultat - $ok. Nakon ovoga, sve što ostaje je da prođemo kroz sve potrebne elemente $ok da dobijemo ključeve koji su nam potrebni. Odvojeno, treba reći da na izlazu dobijamo višedimenzionalni niz. Zato smo ga prikazali na tako složen način: $ok[$j]. Da vidite strukturu niza, koristite funkciju ispod i sve ćete razumjeti.

Print_r($ok);

Čini se da smo sredili funkcije koje smo koristili za svoj rad. Sada ostaje samo da naučite kako pisati te iste regularne izraze, koji su prvi parametar svake od ovih metoda. Pređimo na ono najvažnije.

Kako napisati redovne rečenice

Prvo, pogledajmo osnovne strukture. Izrazi imaju opcije. Navedeni su jednim slovom i napisani na kraju, ispred kojih je kosa crta.

Osim toga, podržani su sljedeći metaznakovi:

Metaznakovi, zauzvrat, mogu imati modifikatore:

Pa, sada možemo prijeći na analizu naših uobičajenih obrazaca iz prošle lekcije. Na osnovu gore navedenih znakova, pokušajmo da shvatimo šta imamo. Evo izraza:

/^]/i

Prva i zadnja kosa crta “/” označavaju da se unutar njih nalazi regularni izraz. Istovremeno, nakon posljednjeg stavljamo "i", ovo je opcija, kao u prvoj tabeli - ne uzimajte u obzir velika i mala slova. Unutar kosih crta nalazi se sam regularni niz. Počinje znakom manje od i oznakom za unos, a sve što dolazi nakon toga do znaka tačke je samo običan tekst koji treba tražiti. Ali sama tačka i simboli iza nje su zanimljiviji. U ovom slučaju, konstrukcija “.*?” označava bilo koji niz znakova. Odnosno, ako kombinujemo samo tekst i ovu konstrukciju, onda ćemo selektovati sav tekst nakon prvog pojavljivanja i do kraja. Da biste zaustavili, morate naići ili na završnu HTML oznaku „više od“ ili na karakter novog reda. Ovaj dizajn nam daje upravo takvu priliku:

Znakovi u uglastim zagradama povezani su logičkim ILI. Kraj je znak veće od ILI početak reda.
To je sav izraz, u njemu postavljamo početni uslov, srednji i krajnji uslov. Nije teško, zar ne? Evo ilustracije radi jasnoće:

Pogledajmo još jednu stvar da sve učvrstimo. Tražili smo veze sa njima:

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

Čitamo izraz. Opet, prvo odbacujemo kose crte i opcije. Zastavice "uis" su same po sebi razumljive, osim "u", koje nisam opisao - pokazuje da koristimo Unicode kodiranje. Nije puno ostalo. Početak je oznaka "a", koja se otvara, zatim dolazi klasa

što znači NE veće ili manje od (otvaranje i zatvaranje HTML oznaka), odnosno bilo koji karakter u ovom slučaju. Klasi se dodaje “+?”, što znači da će ova klasa biti prisutna 1 ili više puta (ali barem 1 put sigurno). A onda dolazi završna html oznaka za oznaku “a”. Unutar veze postoji tekst koji je specificirala grupa

Uostalom, ne znamo kakav će tekst biti tamo, pa definišemo takvu grupu. I na kraju se nalazi završni tag "a":

Imajte na umu da kosu crtu izbjegavamo pomoću obrnute kose crte tako da se ona percipira kao jednostavan tekst.

Fuj. Tema je zaista dosta kompleksna, zahtijeva vježbu. Možda radim nešto ne baš optimalno i moguće je kreirati druge, ispravnije regularne izraze, ali ja sam samouk kao i vi, pa nemojte strogo suditi, već podijelite svoje opcije u komentarima. Također, ako nešto nije jasno, na usluzi su vam stranica za komentare i kontakt.

Regularni izrazi su vrlo moćan, ali u isto vrijeme teško razumljiv alat za obradu stringova. Opisaću glavne tačke. Regularni izraz je uzorak niza. Koristeći ovaj predložak, možete pretraživati ​​pojavljivanja, vršiti zamjene i provjeriti usklađenost s predloškom.

Pravila za kreiranje uzorka

Granice predloška moraju biti označene određenim simbolima, često koristeći " / ", ali ja radije koristim " # " jer obilje kosih crta naprijed/nazad može zasljepiti vaše oči, a heš oznake se obično ne koriste nigdje drugdje. Dakle: " #HereBodyRegularExpression#"

Zagrade se koriste unutar regularnog izraza - to su podizrazi kojima se može manipulirati, na primjer:

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

Ovaj izraz je dizajniran da dobije parametre u nizu URL. Na početku reda nalazi se poseban znak " ^ " - ovo znači početak reda. Sljedeće dolazi " /katalog/" - ovdje nema posebnih znakova, ovo je samo tekst koji bi trebao biti sadržan u redu. Tada smo naišli na zagrade, tj. došli smo do prvog podizraza. Uglaste zagrade označavaju mnogo znakova koji mogu biti u redu na ovom mjestu. Znak " - " znači nabrajanje. Znak " \ " izbjegava posebne znakove. Dakle, u prvom podizrazu možemo imati VELIKA i mala slova latinice, brojeve od 0 do 9, donju crtu, crticu i tačku. Crtica i tačka su posebni znakovi, ali ovdje escaped, tako da su ovdje samo simboli. Nakon uglastih zagrada nalazi se " + " - to znači da se prethodni znak (a za nas je to skup znakova navedenih u uglastim zagradama) može pojaviti 1 ili više puta. Zatim dolazi " / " je samo simbol i sličan drugi podizraz. Zatim dolazi " \.html"šta znači tekst" .html". A onda specijalni znakovi " .* "Tačka znači bilo koji znak, a zvjezdica znači bilo koju količinu prethodnog znaka. To jest, nakon " .html„Sve može proći.

Indikacija količine, kvantifikatori

Gore smo već razmatrali takve simbole koji označavaju broj prethodnih simbola, kao npr + I * . Evo svih mogućnosti za određivanje količine:

Posebni znakovi

Postoje posebne skraćenice za neke grupe znakova:

"pohlepa"

Pogledajmo koncept pohlepe regularnog izraza. Na primjer postoji linija:

#()#

Čitamo: podizraz:

Čini se da je sve tačno, podizraz odgovara:

Ali takođe odgovara:

To ćemo i dobiti, jer... Regularni izrazi su po defaultu pohlepni. Možete ukloniti pohlepu pomoću modifikatora " U", Volim ovo:

#()#U

Modifikatori

Regularni izraz može biti praćen modifikatorima: " #HereBodyRegularExpression#HereModifiers"Vrste modifikatora:

i Omogućava način rada bez obzira na velika i mala slova, tj. velika i mala slova u izrazu se ne razlikuju.
m Označava da se tekst koji se traži treba tretirati kao da se sastoji od više redova. Podrazumevano, mehanizam regularnih izraza tretira tekst kao jedan string, bez obzira na to šta je zapravo. Shodno tome, metaznakovi "^" i "$" označava početak i kraj cijelog teksta. Ako je ovaj modifikator naveden, tada će oni označavati početak i kraj svakog reda teksta.
s Zadani metaznak je " . " ne uključuje znak novog reda u svojoj definiciji. Navođenje ovog modifikatora uklanja ovo ograničenje.
U Uklanja pohlepu regularnog izraza
u Omogućava rad sa regularnim izrazima Ćirilica u UTF-8, inače ne radi ispravno.

php Funkcije za rad sa regularnim izrazima

preg_replace

Pretraži i zamijeni:

Preg_replace (mješoviti $pattern, mješoviti $zamjena, mješoviti $subject [, int $limit = -1 [, int &$count ]]);

Svaka vrijednost može biti string ili niz, u slučaju slučaja $subject niz - vraća se niz, inače string

preg_split

Dijeli string koristeći regularni izraz:

Preg_split (string $pattern, string $subject [, int $limit = -1 [, int $flags = 0]]);

Vraća niz koji se sastoji od podnizova datog niza predmet, koji je podijeljen duž granica koje odgovaraju uzorku uzorak.

Počnimo od toga šta je regularni izraz. Dakle, odgovorite mi na ovo pitanje: da li u riječi "test" postoji "e"? "Jedi!" ti kažeš. Onda vam postavljam drugo pitanje, kako ste pronašli slovo "e" u riječi "test"? Odgovor je očigledan, uzimamo prvi znak, odnosno "t" i uporedimo ga sa onim što tražimo, odnosno sa "e". Ako nisu jednaki, onda uzimamo drugi znak, odnosno "e", i upoređujemo ga sa onim što tražimo, odnosno "e". Voila! Podudaranje je pronađeno. Odgovor: Riječ "test" sadrži slovo "e".

Sada mi odgovorite na još jedno pitanje, gdje je regularni izraz u ovom primjeru? Nadam se da ste pogodili da je regularni izraz ono što tražimo u riječi "test". To jest, slovo "e" u ovom primjeru je regularni izraz.

Za šta se koriste regularni izrazi u PHP-u? U mojoj praksi, regularni izrazi su korišteni, na primjer, da bi se utvrdilo da li je adresa e-pošte pravilno sastavljena. Takvi izrazi se također koriste za utvrđivanje ispravnosti korisničkog imena i lozinke. Koristeći regularne izraze, možete pronaći adresu u linku i sačuvati je. Postoji mnogo stvari koje možete učiniti. Analizirajući ovo, možete identificirati glavnu funkciju regularnih izraza i dvije sporedne. Glavna funkcija, ovo je traženje podudaranja u nizu. Nuspojave uključuju spremanje pronađenih podudaranja i njihovu zamjenu.

Prvi regularni izraz

U teoriji, razumijemo kako pronaći znak "e" u riječi "test", ali kako se to implementira u praksi? Za korištenje regularnih izraza u php-u obično se koriste sljedeće funkcije:

preg_match("regularni izraz (uzorak)", "varijabla u kojoj se vrši pretraga", "Varijabla u kojoj se pohranjuje rezultat pretraživanja (opcijski parametar)"); - Funkcija podudaranja
preg_replace("regularni izraz (uzorak)", "Čime zamijeniti pronađeno podudaranje", "varijabla u kojoj se vrši zamjena"); - Funkcija zamjene

Počnimo koristiti ove funkcije. Evo primjera traženja znaka "e" u riječi "test":

$a = "test";
if(preg_match("/e/",$a)) echo "pronađeno!!";

Kod opisuje uvjet: ako se u varijabli $a nađe nešto što odgovara uzorku, onda prikažite poruku "pronađeno!!" Kao što ste možda primijetili, naš predložak se nalazi između dva "/". U ovom slučaju, simbol "/" simbolizira početak i kraj našeg uzorka. Nadam se da je ovo jasno.

Sve je ovo zanimljivo, naravno... ali naš šablon je vrlo jednostavan, zar ne? Na kraju krajeva, rijetko moramo pronaći neki simbol u varijabli. U većini slučajeva moramo pronaći mnogo znakova, ali i nepoznatih. Kako biti? Postavimo sebi problem i pokušajmo ga riješiti. Pretpostavimo da imamo niz koji se sastoji od brojeva i jednog nepoznatog engleskog slova

Kako pronaći ovo pismo? Može postojati bilo koje slovo engleske abecede, pa kako ga možete identificirati? Sami ste odgovorili na svoje pitanje, postoji bilo koje slovo, odnosno ono je u rasponu od a do z. Možete koristiti opsege u regularnim izrazima. Ako ne znamo koji znak tražimo, ali sigurno znamo da je ovaj znak slovo engleske abecede, onda će unos biti sljedeći:

$a = "123a321";
if(preg_match("//",$a)) echo "pronađeno!!";

Imajte na umu da je opseg zatvoren u zagradama "[" "]". Sve što je sadržano u takvim zagradama je definisano kao jedan simbol, u ovom slučaju simbol se kreće od a do z. Ako trebamo pronaći ne slovo, već broj, onda će unos biti ovakav:

$a = "abc1cba";
if(preg_match("//",$a)) echo "pronađeno!!";

Također želim napomenuti da su regularni izrazi osjetljivi na velika i mala slova, tako da su znakovi “A” i “a” potpuno različiti, da biste tražili oba znaka, napišite ovako:

$a = "123a321";
if(preg_match("//",$a)) echo "pronađeno!!";

Postoji i pretraga ruskih slova, koja se vrši na isti način kao i kod engleskih:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) echo "pronađeno!!";

Metakarakteri

Naučili smo kako tražiti nepoznati karakter u nizu. Šta učiniti ako trebamo pronaći nekoliko znakova? Takozvani metasimboli dolaze u pomoć... Pretpostavimo da imamo niz sa brojevima i slovima, kako to možemo opisati u šablonu? Ti to možeš:

linija - 123a321
uzorak -

Hmm... šablon se zapravo poklapa sa našim stringom, a kada se provjeri usklađenost, dat će dugo očekivanu istinitost! Ali to je nekako glomazan zapis, zar ne?

Evo kako to skratiti:

linija - 123a321
uzorak - *

Čini mi se da je kraći.Šta je simbol "*"? Ovo je isti metasimbol, znači da se simbol koji smo opisali (naime, simbol koji može sadržavati brojeve od 0 do 9 ili slova engleske abecede, od a do z) može ponavljati neograničeno, ili više puta. Da da! Ovaj metasimbol će pronaći podudarnost u praznoj varijabli, jer će čak i odsustvo simbola koji smo opisali vratiti true! Zapamtite ovo

Koji drugi metaznakovi postoje?

Na primjer, metaznak "+" Skoro je sličan metaznaku "*" sa jednim malim izuzetkom. "*" će vratiti true čak i ako nema znaka, a "+" će provjeriti prisustvo barem jednog znaka. Odnosno, ako linija zahtijeva prisustvo minimum jedan znak zatim koristite "+" umjesto "*"

Često se koristi i metaznak "?". To znači da linija ne smije sadržavati više od jednog željenog znaka. Dozvolite mi da dam nekoliko primjera za posljednja dva metaznaka koja sam opisao.

Pretpostavimo da trebamo provjeriti je li korisnička lozinka tačna. Razmislimo o tome šta bi korisnička lozinka trebala sadržavati? Pa, prvo, mora biti barem jedan znak. Drugo, mora sadržavati samo brojeve i slova engleske abecede, pa će regularni izraz izgledati ovako:

$a = "qwerty12345";

Koje znakove dopuštamo? Engleska slova svih velikih i malih slova. Sada pokušajte ostaviti prazan red umjesto lozinke.

$a = "";
if(preg_match("/+/",$a)) echo "Lozinka je ispravna";

Nećete vidjeti poruku „Lozinka je ispravna“. Zašto? Zato što je metaznak "+" provjerio niz da vidi ima li barem jedan znak.

A sad mali trik, ajde da pogledamo naš izraz, nismo dozvolili, pa recimo razmak u njemu, zar ne? stavite razmak na kraj lozinke i pokrenite

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "Lozinka je ispravna";

I zašto vidimo našu poruku o ispravnoj lozinki? Prilično je jednostavno... Funkcija preg_match(); zaustavlja svoju provjeru pri prvom meču. Odnosno, simbol “q” odgovara uzorku koji smo opisali, a sve ostalo više nije važno za funkciju. Šta da radimo? Evo kako to popraviti:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "Lozinka je ispravna";

Dodavanjem "^" na početak izraza i "$" na kraju, kažemo funkciji s čim bi obrazac trebao odgovarati sve linija. Ako pokrenete ovaj kod, nećete vidjeti poruku, jer se na kraju lozinke nalazi nedozvoljen znak - razmak

Sada promijenite metaznak "+" u metaznak "?". Šta mislite da će se dogoditi? Tačno, neće biti poruke o ispravnosti lozinke, jer lozinka sadrži više od jednog znaka. Nadam se da sam pravilno objasnio rad ova tri često korišćena metaznaka

Ponekad je bolje "ne".

Barem smo naučili kako provjeriti da li je lozinka ispravna, i to je dobro! Dozvolite mi da vam kažem o još jednom načinu traženja nečega u nizu. Recimo da trebamo provjeriti da nema brojeva u nizu. Kako uraditi? Evo linije:

(U njega sam posebno uveo ove simbole "-_+()" da život ne bi izgledao kao med...) Mogli bismo formulirati sljedeći izraz:

Ali morate priznati, ne znamo uvijek koji se znakovi koriste u liniji, ali sigurno znamo da u njoj ne bi trebalo biti brojeva! Stoga bi bilo logičnije jednostavno napisati šablon koji bi preskakao redove u kojima br brojevi, a ne oni u kojima postoji "O moj Bože, ima toliko nerazumljivih simbola!!!". Evo primjera ispravno sastavljenog izraza za takve probleme:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "Bez brojeva!";

Kako smo to postigli? Uneli smo simbol Ali! kapa "^" ([^0-9]) postavljena na početku označava da će biti ne bi trebalo Nadam se da je ovo riješeno

Pa da završimo polako... Navest ću dva primjera sa objašnjenjima, tokom kojih ćemo naučiti kako snimiti rezultat pretrage u varijablu, te naučiti kako provjeriti tačnost poštanske adrese

Video sam i sačuvao!

Moj blog

$a = " Moj blog";
preg_match("/ /", $a);

U našem regularnom izrazu opisali smo sve moguće znakove koji se mogu uključiti u vezu. Također želim da obratim pažnju na navodnike i znakove "/" u našem izrazu. Prethodi im obrnuta kosa crta, čemu to služi? Činjenica je da su "/" i citat sami po sebi posebni znakovi. A da bi ih predložak percipirao kao obične simbole, moramo ih ekranizirati. Escape se vrši dodavanjem obrnute kose crte ispred posebnih znakova. Nadam se da je jasno

$a = " Moj blog";
preg_match("/ /", $a, $b);

Pa, shodno tome, potrebno je dodati dodatni parametar u obliku varijable $b, u koji će biti pohranjen pronađeni link. Također morate znati da je rezultat pretraživanja smješten u niz. Dakle, varijabla $b je niz. Informacije koje tražimo nalaze se pod indeksom 1. To znači da je rezultat pretrage u varijabli $b. Prikažimo rezultat na ekranu:

$a = " Moj blog";
preg_match("/ /", $a, $b);
echo $b;

Prava adresa je ključ uspjeha!

I na kraju, odgovor na pitanje, da li je e-mail tačan? Prvo, trebate saznati koji su znakovi dozvoljeni u adresama? Koliko ja znam, dozvoljeni karakteri uključuju:

  • Engleska slova, brojevi, “_”, “-” hmmmm sve izgleda kao da je... Nastavićemo od ovoga.
  • Zatim imamo "@"
  • Posle engleska slova
  • Sledeće, tačka
  • I opet engleska slova...

Dakle, regularni izraz će biti sljedeći:

$a = " [email protected]";
if(preg_match("/^+@+.+$/", $a)) echo "e-mail adresa je tačna!";
else echo "e-mail adresa NIJE ispravna!";

Pa... nadam se da vas ovakvi zapisi sada ne plaše i da ih sasvim razumete.

Za kraj, želim nešto da kažem. Članak se pokazao glomaznim, a istovremeno je pokrivao samo dio mogućnosti. Ako čitate ovu rečenicu, onda ste je najvjerovatnije pročitali do kraja, na čemu vam puno hvala

Što se tiče serije članaka o razvoju cms bloga, prvi dio serije Proglašavam ga zatvorenim! U bliskoj budućnosti ćemo početi sa implementacijom admin panela, tako da nemojte "prebacivati" Ako imate pitanja, rado ću odgovoriti. Sve najbolje tebi, to je sve što imam!

Najbolji članci na ovu temu