Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Savjet
  • Regularni izraz php četiri riječi ispisane. Regularni izrazi (uzorci)

Regularni izraz php četiri riječi ispisane. Regularni izrazi (uzorci)

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

Obično su sve te opcije označene kao "/x". Mogu se čak koristiti unutar predložaka pomoću nove konstrukcije (?...)

Regularni izrazi ili obrasci isti su kao procedure regularnih izraza u Unixu. Izrazi i sintaksa posuđeni su iz slobodno distribuiranih V8 procedura Henryja Spencera, 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 metakaraktera):

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

Prema zadanim postavkama, metakarakteri su pohlepni. Podudaranje se propagira onoliko puta koliko je moguće, bez uzimanja u obzir učinka sljedećih metakaraktera. Ako im želite "smanjiti apetit", upotrijebite simbol "?". Ovo ne mijenja značenje metaznakova, samo smanjuje širenje. Tako:

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

\t - znak kartice
\n - nova linija
\r - povrat kočije
\A - prijevod formata
\v - okomito tabeliranje
\a - poziv
\e - pobjeći
\033 - oktalni zapis simbola
\x1A - heksadecimalni
\c[ - kontrolni simbol
\l - mali sljedeći znak
\u - velika slova -//-
\L - svi likovi u mala slova prema \E
\U - u gornjem -//-
\E - limiter promjene registra
\Q - poništi akciju kao metakarakter

Osim toga, Perlu su dodani sljedeći metakarakteri:

Imajte na umu da je ovo sve "jedan" znak. Koristite modifikatore za označavanje slijeda. Tako:

Osim toga, postoje imaginarni metakarakteri. Označavanje nepostojećih simbola na mjestu promjene vrijednosti. kao što su:

Granica riječi (\b) je zamišljena točka između znakova \w i \W. Unutar klase znakova, "\b" predstavlja znak povratnice. Metakarakteri \A I \Z- slični su "^" i "$", ali ako početak retka "^" i kraj retka "$" djeluju za svaki red u nizu s više reda, tada \A I \Z označavaju početak i kraj cijelog višerednog niza.

Ako se unutar uzorka koristi grupiranje (zagrade), tada se broj podniza grupe označava kao "\cifra". Imajte na umu da slijedeći uzorak unutar izraza ili bloka, ove grupe su označene kao "$digit". Osim toga, postoje dodatne varijable:

Primjer:

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

Perl verzija 5 sadrži dodatne konstrukcije predložaka:

Primjer:

$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Pronađite broj iza kojeg slijedi "-" ( print "$1\n"; # Rezultat "2") else ( print "search error\n" ;)

(?!uzorak) - “gledanje” unaprijed negacijom:

Primjer:

$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Pronađite znamenku iza koje ne slijedi "+" ( print "$1\n"; # Rezultat "2" ) else ( print "traži pogreška\n"; )

(?ismx) - “unutarnji” modifikatori. Pogodno je koristiti u predlošcima, gdje, na primjer, morate odrediti modifikator unutar predloška.

Pravila regularnog izraza. (regularni izraz)

  1. Bilo koji znak predstavlja sam sebe osim ako nije metakarakter. Ako trebate poništiti učinak metaznaka, stavite "\" ispred njega.
  2. Niz znakova označava niz ovih znakova.
  3. Gomila mogući likovi(klasa) nalazi se u uglatim zagradama "", to znači da in 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 na ovom mjestu u izrazu. Unutar klase možete koristiti simbol "-" za označavanje niza znakova. Na primjer, a-z je jedno od malih slova latinica, 0-9 - broj, itd.
  4. Forum PHP portala. S.U.

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

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

Neki ljudi, kada se suoče s problemom, pomisle: "Da, ja sam pametan, riješit ću to koristeći regularne izraze." Sada imaju dva problema.

Primjeri šablona

Počnimo s 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. "cat" ili "CAT" odgovara ovom obrascu). Drugi izraz traži u tekstu vrijeme u formatu 12:34.

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

  • i - kaže da pretraživanje ne bi trebalo razlikovati velika i mala slova (prema zadanim postavkama osjetljivo na velika i mala slova)
  • u - kaže da izraz i tekst koji se pretražuju koriste utf-8 kodiranje, a ne samo slova. Bez nje traženje ruskih (i bilo kojih drugih nelatiničnih) znakova možda neće raditi ispravno, stoga biste je uvijek trebali postaviti.

Sam predložak sastoji se 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." Ovdje puni popis posebni znakovi(u PHP priručniku nazivaju se metakarakterima), 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 će se dogoditi. Postoji u php posebna funkcija preg_match($regexp, $text, $match) , koji uzima regularni izraz, tekst i prazan niz kao ulaz. Provjerava sadrži li tekst podniz koji odgovara ovaj predložak i vraća 0 ako ne, ili 1 ako postoji. A u proslijeđenom nizu, prvo pronađeno podudaranje s pravilnim nizom smješta se 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

Ponovimo što znače različiti tipovi zagrade:

  • Proteza za zube a(1,5) odredite broj ponavljanja prethodnog znaka - u ovom primjeru, izraz traži 1 do 5 uzastopnih slova "a"
  • Uglate 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 posebni znakovi poput | ne rade unutar uglatih zagrada. ili * - označavaju regularni simbol. Ako postoji znak ^ u uglatim zagradama na početku, tada se značenje mijenja u suprotno: "bilo koji znak osim onih koji su naznačeni" - na primjer [^a-c] znači "jedan bilo koji lik, 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 kao što su 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 raspon znakova u uglatim 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 vodiče o regularnim izrazima, vjerojatno ste primijetili da se obrnuta kosa crta svugdje drugačije piše. Negdje pišu jednu obrnutu kosu crtu: \d , ali ovdje se u primjerima ponavlja 2 puta: \\d . Zašto?

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

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

  • Za pisanje \$ u regularnom izrazu, pišemo "\\$" u kodu
  • Da bismo napisali \\ u regularnom izrazu, udvostručimo svaku obrnutu kosu crtu i napišemo "\\\\"
  • Da biste napisali obrnutu kosu crtu i broj (\1) u uobičajenom formatu, morate udvostručiti obrnutu kosu crtu: "\\1"

U drugim slučajevima, jedna ili dvije obrnute kose crte dat će isti rezultat: "\\d" i "\d" će umetnuti 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 kakvi jesu. Možete provjeriti koji će znakovi biti umetnuti u niz i što će mehanizam regularnih izraza vidjeti koristeći echo: echo "\$"; . Da, teško je, ali što možete učiniti?

Poseban dizajn u redovnoj sezoni

  • \d traži bilo koju jednu znamenku, \D - bilo koji znak osim znamenke
  • \w odgovara bilo kojem slovu (bilo koje abecede), broju ili podvlaci _. \W odgovara bilo kojem znaku osim slova, broja ili podvlake.

Također, postoji pogodan uvjet za označavanje granice riječi: \b . Ova konstrukcija znači da s jedne strane treba biti znak koji je slovo/broj/podvlaka (\w), a s druge strane treba biti znak koji to nije. Pa, na primjer, želimo pronaći 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čito nije ono što smo htjeli. Ako regularnom izrazu dodamo granični uvjet riječi: /\bcat\b/ui , sada će se pretraživati ​​samo samostalna riječ "cat".

Priručnik

) 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 pomoći će vam u pisanju, čišćenju teksta od nepotrebnih fragmenata, traženju potrebnih dijelova u velikim količinama teksta i tako dalje.

Ova tema je prilično komplicirana, ali pokušat ću ukratko obuhvatiti najviše važne točke. Ne znam koliko ću uspjeti, ali se nadam da će lekcija biti korisna.
Dakle, počnimo s činjenicom da postoji nekoliko funkcija za rad s regularnim izrazima u PHP-u, ali najčešće se koriste tri:

  • preg_replace - traži i zamijeni odgovarajući regularni izraz tekst;
  • preg_match - samo obična pretraga;
  • preg_split - pretraži i podijeli tekst.

Po barem, u prethodnim lekcijama koristili smo upravo njih. Točnije, umjesto preg_match bilo je preg_match_all, ali to je u biti ista stvar, samo što potonji ne prekida pretragu nakon prvog pronalaska. Odnosno, ako koristimo preg_match, nećemo pronaći sve pojave, već samo prvu.

Odabir funkcije koju ćete koristiti u kojoj situaciji vrlo je jednostavan. Moramo zamijeniti - koristimo replace, kao u slučaju kada smo trebali ukloniti nepotrebne dijelove koda stranice, sjećate se?

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

Prvi parametar funkcije je regularni znak koji određuje š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 input type=checkbox, kao i oznake za otvaranje i zatvaranje. Zamijenili su ih sa ", odnosno jednostavno su ih izbrisali. Nadam se da je ovdje sve jasno. Nešto kasnije ćemo prijeći na analizu samog izraza (prvog parametra funkcije).
Tu je i primjer korištenja preg_match_all, što je bilo korisno za pronalaženje svih poveznica u preostalom tekstu. Tada su nam bile potrebne veze jer su sadržavale ključne riječi, koje smo analizirali. Evo što se dogodilo:

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

Prvi parametar opet je regularni izraz za pronalaženje svih veza koje su prirodno zatvorene u oznaci "a" (ako niste upoznati s html označavanjem, 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 preostaje je proći kroz sve potrebne elemente $ok da dobijemo ključne zahvate koji su nam potrebni. Zasebno treba reći da na izlazu dobivamo višedimenzionalni niz. Zato smo ga prikazali na tako složen način: $ok[$j]. Da biste vidjeli strukturu niza, upotrijebite funkciju u nastavku i sve ćete razumjeti.

Ispis_r($ok);

Čini se da smo posložili funkcije koje smo koristili za svoj rad. Sada preostaje samo naučiti kako napisati te iste regularne izraze, koji su prvi parametar svake od ovih metoda. Prijeđimo na ono najvažnije.

Kako napisati pravilne rečenice

Prvo, pogledajmo osnovne strukture. Izrazi imaju opcije. Određeni su jednim slovom i ispisani na kraju, a ispred njih stoji kosa crta.

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

Metaznakovi, pak, mogu imati modifikatore:

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

/^]/i

Prva i zadnja kosa crta “/” označavaju da se unutar njih nalazi regularni izraz. U isto vrijeme, nakon posljednjeg stavljamo "i", ovo je opcija, kao u prvoj tablici - ne uzimajte u obzir velika i mala slova. Unutar kosih crta je sam pravilan niz. Započinje znakom manje od i oznakom za unos, a sve što dolazi nakon toga do znaka točke samo je običan tekst za traženje. Ali sama točka i simboli iza nje su zanimljiviji. U ovom slučaju, konstrukcija ".*?" znači bilo koji niz znakova. To jest, ako kombiniramo samo tekst i ovu konstrukciju, tada ćemo odabrati sav tekst nakon prvog pojavljivanja i do kraja. Da biste prestali, morate naići na završnu HTML oznaku "više od" ili znak novog retka. Ovaj dizajn nam daje upravo takvu priliku:

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

Pogledajmo još jednu stvar da sve učvrstimo. Potražili smo poveznice s njima:

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

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

što znači NIJE veće ili manje od (otvarajuće i zatvarajuće HTML oznake), odnosno bilo koji znakovi u ovom slučaju. “+?” se dodaje klasi, što znači da će ova klasa biti prisutna 1 ili više puta (ali barem 1 put sigurno). Zatim dolazi završna html oznaka za oznaku "a". Unutar veze nalazi se tekst koji je odredila grupa

Uostalom, ne znamo kakav će tekst tamo biti, pa definiramo takvu grupu. I na kraju je završna oznaka "a":

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

Fuj. Tema je stvarno dosta složena, zahtijeva vježbu. Možda radim nešto ne baš optimalno i moguće je stvoriti druge, ispravnije regularne izraze, ali ja sam samouk kao i vi, stoga nemojte strogo suditi, već podijelite svoje mogućnosti u komentarima. Također, ako nešto nije jasno, komentari i kontakt stranica su vam na usluzi.

Regularni izrazi su vrlo moćan, ali u isto vrijeme teško razumljiv alat za obradu nizova. Opisat ću glavne točke. Regularni izraz je uzorak niza. Pomoću ovog predloška možete pretraživati ​​pojavljivanja, vršiti zamjene i provjeravati usklađenost s predloškom.

Pravila za izradu uzorka

Granice predloška moraju biti označene određenim simbolima, često koristeći " / ", ali radije koristim " # " zato što vam obilje kosih crta naprijed/natrag može zaslijepiti oči, a hash 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:

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

Ovaj izraz je dizajniran za dobivanje parametara u nizu URL. Na početku retka nalazi se poseban znak " ^ " - ovo znači početak retka. Slijedi " /katalog/" - ovdje nema posebnih znakova, ovo je samo tekst koji bi trebao biti sadržan u retku. Zatim smo naišli na zagrade, tj. došli smo do prvog podizraza. Uglate zagrade označavaju mnogo znakova koji mogu biti u retku na ovom mjestu. Znak " - " znači nabrajanje. Znak " \ " izbjegava posebne znakove. Dakle, u prvom podizrazu možemo imati VELIKA i mala slova latinične abecede, brojeve od 0 do 9, podvlaku, crticu i točku. Crtica i točka su posebni znakovi, ali ovdje su escaped, tako da su to samo simboli. Nakon uglatih zagrada nalazi se " + " - to znači da se prethodni znak (a za nas je to skup znakova navedenih u uglatim zagradama) može pojaviti 1 ili više puta. Zatim dolazi " / " je samo simbol i sličan drugi podizraz. Zatim dolazi " \.html"što znači tekst" .html". A zatim posebni znakovi " .* "Toč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.

Označavanje količine, kvantifikatori

Gore smo već razmotrili takve simbole koji označavaju broj prethodnih simbola, kao što je + I * . Ovdje su sve mogućnosti za određivanje količine:

Posebni znakovi

Za neke grupe znakova postoje posebne kratice:

"Pohlepa"

Pogledajmo koncept regularnog izraza pohlepa. Na primjer, postoji redak:

#()#

Čitamo: podizraz:

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

Ali također odgovara:

To ćemo i dobiti, jer... Regularni izrazi su pohlepni prema zadanim postavkama. Pohlepu možete ukloniti pomoću modifikatora " U", kao ovo:

#()#U

Modifikatori

Nakon redovnog izraza mogu slijediti modifikatori: " #HereBodyRegularExpression#HereModifiers"Vrste modifikatora:

ja Omogućuje način rada koji ne razlikuje velika i mala slova, tj. velika i mala slova u izrazu se ne razlikuju.
m Označava da se tekst koji se pretražuje treba tretirati kao da se sastoji od više redaka. Prema zadanim postavkama mehanizam regularnih izraza tretira tekst kao jedan niz, bez obzira što on zapravo jest. Sukladno tome, metakarakteri "^" i "$" označavaju početak i kraj cijelog teksta. Ako je ovaj modifikator naveden, tada će označavati početak i kraj svakog retka teksta.
s Zadani metakarakter je " . " ne uključuje znak novog retka u svojoj definiciji. Navođenje ovog modifikatora uklanja ovo ograničenje.
U Uklanja regularni izraz pohlepe
u Omogućuje rad s regularnim izrazima Ćirilica u UTF-8, inače ne radi ispravno.

php Funkcije za rad s regularnim izrazima

preg_zamijeniti

Traži i zamijeni:

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

Svaka vrijednost može biti niz ili niz, u slučaju velikih i malih slova $predmet niz - vraća se niz, inače niz

preg_split

Rastavlja niz koristeći regularni izraz:

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

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

Počnimo s time što je regularni izraz. Dakle, odgovorite mi na ovo pitanje: postoji li "e" u riječi "test"? "Jesti!" Ti kažeš. Onda vas pitam drugo pitanje, kako ste pronašli slovo "e" u riječi "test"? Odgovor je očit, uzmemo prvi znak, odnosno "t" i usporedimo ga s onim što tražimo, odnosno s "e". Ako nisu jednaki, onda uzmemo drugi znak, to jest "e", i usporedimo ga s onim što tražimo, to jest "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 ovdje uobičajeni izraz ono što tražimo u riječi "test". Odnosno, slovo "e" u ovom primjeru je uobičajeni izraz.

Za što se regularni izrazi koriste u PHP-u? U mojoj praksi regularni izrazi korišteni su, na primjer, da se utvrdi je li adresa e-pošte ispravno sastavljena. Takvi se izrazi također koriste za utvrđivanje ispravnosti korisničkog imena i lozinke. Pomoću regularnih izraza možete pronaći adresu u poveznici i spremiti 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 provodi 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 sprema rezultat pretrage (neobavezni parametar)"); - Funkcija podudaranja
preg_replace("regularni izraz (uzorak)", "Čime zamijeniti pronađeno podudaranje", "varijabla u koju 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 je u varijabli $a pronađeno nešto što odgovara uzorku, tada se prikazuje poruka "pronađeno!!" Kao što ste možda primijetili, naš se predložak nalazi između dva "/". U ovom slučaju simbol "/" simbolizira početak i kraj našeg obrasca. Nadam se da je ovo jasno.

Sve je ovo zanimljivo, naravno... ali naš predložak je vrlo jednostavan, zar ne? Uostalom, rijetko trebamo pronaći neki simbol u varijabli. U većini slučajeva trebamo pronaći mnoge likove, a također i nepoznate. Kako biti? Postavimo si 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 u rasponu je od a do z. Raspone možete koristiti u regularnim izrazima. Ako ne znamo koji znak tražimo, ali znamo sigurno da je taj znak slovo engleske abecede, tada će unos biti sljedeći:

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

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

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

Također želim napomenuti da regularni izrazi razlikuju velika i mala slova, tako da su znakovi "A" i "a" potpuno različiti, da tražite oba znaka, napišite ovako:

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

Postoji i pretraga za ruskim slovima, koja se provodi na isti način kao i za engleska:

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

Metakarakteri

Naučili smo kako tražiti nepoznati znak u nizu. Što učiniti ako trebamo pronaći nekoliko likova? U pomoć priskaču takozvani metasimboli... Pretpostavimo da imamo niz s brojevima i slovima, kako to opisati u predlošku? Možeš ti to:

linija - 123a321
uzorak -

Hmm... predložak zapravo odgovara našem nizu, a kada se provjeri usklađenost, dat će dugo očekivanu istinu! Ali to je pomalo glomazan zapis, zar ne?

Evo kako ga skratiti:

linija - 123a321
uzorak - *

Čini mi se da je kraći. Što je simbol "*"? Ovo je isti metasimbol, što 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 dugo, ili više puta. Da da! Ovaj metasimbol će pronaći podudaranje u praznoj varijabli, budući da će čak i odsutnost simbola koji smo opisali vratiti true! Zapamtite ovo

Koji još metakarakteri postoje?

Na primjer, metaznak "+" Gotovo je sličan metaznaku "*" s jednom malom iznimkom. "*" će vratiti true čak i ako nema znaka, a "+" će provjeriti prisutnost barem jednog znaka. Odnosno, ako linija zahtijeva prisutnost minimum jedan znak zatim koristite "+" umjesto "*"

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

Pretpostavimo da trebamo provjeriti točnost korisničke lozinke. Razmislimo što bi trebala sadržavati korisnička lozinka? Pa, prvo, mora biti barem jedan lik. Drugo, mora sadržavati samo brojeve i slova engleske abecede, tako da će regularni izraz izgledati ovako:

$a = "qwerty12345";

Koje likove smo dopustili? Engleska slova u bilo kojem slučaju i brojevi. Sada pokušajte ostaviti prazan redak umjesto lozinke.

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

Nećete vidjeti poruku "Lozinka je točna". Zašto? Budući da je metaznak "+" provjeravao niz da vidi ima li barem jedan znak.

A sada mali trik, pogledajmo naš izraz, nismo dopustili, pa, recimo razmak u njemu, zar ne? stavite razmak na kraju lozinke i pokrenite

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

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

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

Dodavanjem "^" na početku izraza i "$" na kraju, govorimo funkciji što uzorak treba odgovarati svi crta. Ako pokrenete ovaj kod, nećete vidjeti poruku jer se na kraju lozinke nalazi nedopušten znak - razmak

Sada promijenite metakarakter "+" u metakarakter "?". Što misliš da će se dogoditi? Ispravno, neće biti poruke o ispravnosti lozinke, jer lozinka sadrži više od jednog znaka. Nadam se da sam ispravno objasnio rad ova tri često korištena metakaraktera

Ponekad je bolje "ne".

Barem smo naučili kako provjeriti je li lozinka točna, i to je dobro! Ispričat ću vam još jedan način traženja nečega u nizu. Recimo da trebamo provjeriti nema li brojeva u nizu. Kako to učiniti? Evo retka:

(U nju 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 retku, ali znamo sigurno da u njemu ne bi trebalo biti brojeva! Stoga bi bilo logičnije jednostavno napisati predložak koji bi preskakao retke u kojima Ne brojevima, a ne onima u kojima ima "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? Unijeli smo simbol Ali! kapa "^" ([^0-9]) postavljena na početku označava da će ih biti ne bi trebalo Nadam se da je ovo riješeno

Pa da završimo polako... Navest ću dva primjera s objašnjenjima, tijekom kojih ćemo naučiti kako spremiti rezultat pretraživanja u varijablu, te kako provjeriti točnost poštanske adrese

Vidio sam i spremio!

Moj blog

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

U našem regularnom izrazu opisali smo sve moguće znakove koji mogu biti uključeni u vezu. Također želim obratiti pozornost na znakove navodnika i "/" u našem izrazu. Ispred njih stoji obrnuta kosa crta, čemu to služi? Činjenica je da su "/" i navodnici sami po sebi posebni znakovi. A kako bi ih predložak mogao percipirati kao obične simbole, moramo ih ekranizirati. Escape se izvodi dodavanjem obrnute kose crte ispred posebnih znakova. Nadam se da je jasno

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

Pa, sukladno tome, potrebno je dodati dodatni parametar u obliku varijable $b, u kojoj će se pohraniti pronađena veza. Također morate znati da se rezultat pretraživanja nalazi u nizu. Prema tome, varijabla $b je niz. Informacija koju tražimo je pod indeksom 1. To znači da je rezultat pretraživanja u varijabli $b. Prikažimo rezultat na ekranu:

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

Prava adresa je ključ uspjeha!

I za kraj odgovor na pitanje je li e-mail ispravan? Prvo morate saznati koji su znakovi dopušteni u adresama? Koliko ja znam, dozvoljeni znakovi uključuju:

  • Engleska slova, brojevi, “_”, “-” ummmm sve izgleda... Nastavit ćemo od ovoga.
  • Zatim imamo "@"
  • Poslije, engleska slova
  • Dalje, točka
  • I opet engleska slova...

Dakle, regularni izraz će biti sljedeći:

$a = " [e-mail zaštićen]";
if(preg_match("/^+@+.+$/", $a)) echo "e-mail adresa je točna!";
else echo "e-mail adresa NIJE ispravno napisana!";

Pa... Nadam se da te takvi zapisi sada ne plaše i da ih sasvim razumiješ.

Na kraju, želim nešto reći. Članak se pokazao glomaznim, a ujedno je pokrivao samo dio mogućnosti. Ako čitate ovu rečenicu, onda ste je najvjerojatnije pročitali do kraja, na čemu vam veliko hvala

Što se tiče serije članaka o razvoju cms bloga, prvi dio serije Proglašavam zatvorenim! U bliskoj budućnosti počet ćemo implementirati administrativnu ploču, stoga nemojte "prebacivati" Ako imate bilo kakvih pitanja, rado ću odgovoriti. Svaka ti čast, to je sve što imam!

Najbolji članci na temu