Exemple de expresii regulate PHP.

Ştiri Expresii regulate

, este un instrument de procesare a șirurilor foarte puternic, dar în același timp greu de înțeles. Voi descrie punctele principale. O expresie regulată este un model de șir. Folosind acest șablon, puteți căuta apariții, puteți efectua înlocuiri și puteți verifica conformitatea cu șablonul.

Reguli pentru crearea unui model / Limitele șablonului trebuie să fie indicate prin anumite simboluri, adesea folosind „ # ", dar prefer să folosesc" " pentru că abundența de bare oblice înainte/înapoi vă poate uimi ochii, iar semnele hash nu sunt de obicei folosite nicăieri altundeva. Deci: ""

#HereBodyRegularExpression#

Parantezele sunt folosite în interiorul unei expresii regulate - acestea sunt subexpresii care pot fi manipulate, de exemplu:

#^/catalog/(+)/(+)\.html.*# Această expresie este concepută pentru a obține parametrii într-un șir URL ^ . La începutul rândului există un caracter special " " - asta înseamnă începutul liniei. Urmează "/catalog/ - " - nu există caractere speciale aici, acesta este doar text care ar trebui să fie conținut în linie. Apoi am întâlnit paranteze, adică am ajuns la prima subexpresie. Parantezele pătrate indică multe caractere care pot fi în linie în acest loc. Semnul " \ " înseamnă enumerare. Semn " " ecrane caractere speciale + . Astfel, în prima subexpresie putem avea litere MARI și mici ale alfabetului latin, numere de la 0 la 9, o liniuță, o liniuță și un punct. Linia și punctul sunt caractere speciale, dar aici sunt scăpate, așa că aici sunt doar personaje. După paranteze pătrate apare semnul „ / " - aceasta înseamnă că caracterul anterior (și pentru noi acesta este un set de caractere specificat între paranteze drepte) poate apărea de 1 sau mai multe ori. Apoi vine " " este doar un simbol și o a doua subexpresie similară. Apoi vine "\.html „ce înseamnă textul”.html .* ". Și apoi personaje speciale" „ce înseamnă textul”„Un punct înseamnă orice caracter, iar un asterisc înseamnă orice cantitate din caracterul anterior. Adică după „

„Orice poate merge.

Indicarea cantității, cuantificatori + Mai sus am luat deja în considerare astfel de simboluri care indică numărul de simboluri anterioare, cum ar fi * Şi

. Iată toate posibilitățile de specificare a cantității:

Personaje speciale

Există abrevieri speciale pentru unele grupuri de caractere:

"Lăcomie"

#()#

Să ne uităm la conceptul de lăcomie a expresiei regulate. De exemplu, există o linie:

Citim: subexpresie:

Totul pare a fi corect, subexpresia se potrivește:

Asta vom obține, pentru că... Expresiile regulate sunt lacome în mod implicit. Puteți elimina lăcomia folosind modificatorul " U", ca aceasta:

#()#U

Modificatori

O expresie regulată poate fi urmată de modificatori: " #HereBodyRegularExpression#HereModifiers„Tipuri de modificatori:

i Activează modul fără majuscule, de ex. literele mari și mici nu diferă în expresie.
m Indică faptul că textul căutat trebuie tratat ca fiind format din mai multe rânduri. În mod implicit, motorul de expresii regulate tratează textul ca un singur șir, indiferent de ceea ce este de fapt. În consecință, metacaracterele „^” și „$” indica începutul și sfârșitul întregului text. Dacă se specifică acest modificator, atunci ei vor indica începutul și, respectiv, sfârșitul fiecărei linii de text.
s Metacaracterul implicit este " . „ nu include un caracter de linie nouă în definiția sa. Specificarea acestui modificator elimină această restricție.
U Îndepărtează lăcomia expresiei regulate
u Permite lucrul cu expresiile regulate chirilic în UTF-8, altfel nu funcționează corect.

php Funcții pentru lucrul cu expresii regulate

preg_replace

Căutați și înlocuiți:

Preg_replace (mixt $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]]);

Fiecare valoare poate fi un șir sau o matrice, după caz $subiect array - este returnat un tablou, în caz contrar un șir

preg_split

Împarte un șir folosind o expresie regulată:

Preg_split (șir $pattern , șir $subiect [, int $limită = -1 [, int $flags = 0 ]]);

Returnează o matrice formată din subșiruri ale șirului dat subiect, care este împărțit de-a lungul limitelor corespunzătoare modelului model.

Când lucrează cu texte în orice limbaj de programare modern, dezvoltatorii se confruntă în mod constant cu sarcinile de verificare a datelor introduse pentru conformitatea cu modelul dorit, căutarea și înlocuirea fragmentelor de testare și alte operațiuni tipice pentru procesarea informațiilor simbolice. Dezvoltarea propriilor algoritmi de verificare duce la pierderi de timp, incompatibilitate a codului programului și complexitate în dezvoltarea și modernizarea acestuia.

Dezvoltarea rapidă a limbajelor de dezvoltare pentru Internet și WEB a necesitat crearea de instrumente universale și compacte pentru procesarea informațiilor text cu o cantitate minimă de cod necesară pentru aceasta. Limbajul PHP, popular printre începători și dezvoltatori profesioniști, nu face excepție. Exprimarea regulată ca limbaj de șablon de text vă permite să simplificați sarcinile de procesare a textului și să reduceți codul programului cu zeci și sute de linii. Multe probleme nu pot fi rezolvate fără el.

Expresii regulate în PHP

Limbajul PHP conține trei mecanisme de lucru cu expresii regulate - „ereg”, „mb_ereg” și „preg”. Cea mai comună este interfața „preg”, ale cărei funcții oferă acces la biblioteca de expresii regulate PCRE, dezvoltată inițial pentru limbajul Perl, care este inclus cu PHP. Funcțiile preg caută într-un anumit șir de text potriviri conform unui model specific în limbajul expresiei regulate.

Bazele sintaxei

Într-un articol scurt este imposibil să descriem în detaliu întreaga sintaxă a expresiilor regulate, există o literatură specială pentru aceasta. Prezentăm doar elementele principale pentru a arăta posibilitățile largi pentru dezvoltator și pentru a înțelege exemplele de cod.

B este definit formal într-un mod foarte complex, așa că haideți să simplificăm descrierea. O expresie regulată este un șir de text. Constă dintr-un model delimitat și un modificator care indică modul de procesare. Este posibil să includeți diverse alternative și repetări în șabloane.

De exemplu, în expresia /\d(3)-\d(2)-\d(2)/m separatorul va fi «/» , apoi vine modelul și simbolul "m" va fi un modificator.

Toată puterea expresiilor regulate este codificată folosind metacaractere. Principalul metacaracter al limbii este backslash - „\”. Acesta inversează tipul personajului care îl urmează (adică, un caracter obișnuit devine metacaracter și invers). Un alt metacaracter important este bara oblică „|”, care specifică variante alternative ale modelului. Mai multe exemple de metacaractere:

PHP, atunci când procesează expresii regulate, tratează spațiul ca pe un caracter semnificativ separat, astfel încât expresiile ABCWHERE și ABCWHERE sunt diferite.

Submodele

În PHP, submodele obișnuite sunt separate prin paranteze și sunt uneori numite „subexpresii”. Efectuați următoarele funcții:

    Evidențierea alternativelor. De exemplu, șablon căldură(ceva|pasăre|) se potrivește cu cuvintele „căldură”, „pasăre de foc” Mai sus am luat deja în considerare astfel de simboluri care indică numărul de simboluri anterioare, cum ar fi "friptură". Și fără paranteze ar fi doar un șir gol, „pasăre” și „prăjire”.

    Sub-model „incitant”. Aceasta înseamnă că, dacă un subșir se potrivește în model, atunci toate potrivirile sunt returnate ca rezultat. Pentru claritate, să dăm un exemplu. Având în vedere următoarea expresie regulată: câștigătorul primește((aur|aurit)(medalie|cupă)) -și linia de căutare a potrivirilor: „Câștigătorul primește o medalie de aur”. Pe lângă expresia originală, rezultatul căutării va returna: "medalie de aur", „medalie”, „aur”.

Operatori de repetiție (quadrifiers)

Când scrieți expresii regulate, este adesea necesar să analizați repetarea numerelor și simbolurilor. Aceasta nu este o problemă dacă nu există foarte multe repetări. Dar ce să facem când nu știm numărul lor exact? În acest caz, trebuie să utilizați metacaractere speciale.

Pentru a descrie repetițiile, se folosesc cvadrifiere - metasimboluri pentru a specifica cantitatea. Quadrificatoarele sunt de două tipuri:

  • generale, cuprinse între paranteze;
  • abreviat.

Cuantificatorul general specifică numărul minim și maxim de repetări permise ale unui element, exprimate ca două numere între acolade, astfel: x(2,5). Dacă numărul maxim de repetări este necunoscut, al doilea argument este omis: x(2,).

Cuantificatoarele scurte reprezintă simboluri pentru cele mai comune repetări pentru a evita aglomerația inutilă de sintaxă. Sunt utilizate în mod obișnuit trei abrevieri:

1. * - zero sau mai multe repetări, ceea ce este echivalent cu (0,).

2. + - una sau mai multe repetări, adică ,).

3. ? - zero sau doar o repetare - (0,1).

Exemple de expresii regulate

Pentru cei care învață expresii regulate, exemplele sunt cel mai bun tutorial. Vom prezenta câteva care își arată capacitățile largi cu un minim de efort. Toate codurile de program sunt pe deplin compatibile cu versiunile PHP 4.x și ulterioare. Pentru a înțelege pe deplin sintaxa și a utiliza toate caracteristicile limbajului, vă recomandăm cartea lui J. Friedl „Expresii regulate”, care discută pe deplin sintaxa și conține exemple de expresii regulate nu numai în PHP, ci și pentru Python, Perl, MySQL, Java, Ruby și C#.

Verificarea corectitudinii adresei de e-mail

Sarcină. Există o pagină de internet care solicită vizitatorului o adresă de e-mail. Expresia regulată trebuie să verifice dacă adresa primită este corectă înainte de a trimite mesaje. Verificarea nu garantează că cutia poștală specificată există efectiv și acceptă scrisori. Dar poate elimina adresele evident incorecte.

Soluţie. Ca și în cazul oricărui limbaj de programare, expresiile regulate de verificare a adresei de e-mail pot fi implementate în PHP într-o varietate de moduri, iar exemplele din acest articol nu sunt cele mai importante. Prin urmare, în fiecare caz vom furniza o listă de cerințe care trebuie luate în considerare la programare, iar implementarea specifică depinde în întregime de dezvoltator.

Deci, o expresie care verifică dacă un e-mail este valid trebuie să verifice următoarele condiții:

  1. Prezența simbolului @ în șirul sursă și absența spațiilor.
  2. Partea de domeniu a adresei, urmată de simbolul @, conține doar caractere valide pentru numele de domenii. Același lucru este valabil și pentru numele de utilizator.
  3. Când verificați un nume de utilizator, trebuie să căutați caractere speciale precum apostrof sau Aceste caractere sunt potențial periculoase și pot fi folosite în atacuri precum injectarea SQL. Evitați astfel de adrese.
  4. Numele de utilizator permit doar un punct, care nu poate fi primul sau ultimul caracter de pe linie.
  5. Numele de domeniu trebuie să conțină cel puțin două și nu mai mult de șase caractere.

Un exemplu care ține cont de toate aceste condiții poate fi văzut mai jos în figură.

Verificarea validității URL-urilor

Sarcină. Verificați dacă un anumit șir de text este valid Încă o dată, expresiile regulate de verificare a adreselor URL pot fi implementate într-o varietate de moduri.

Soluţie. Versiunea noastră finală arată astfel:

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

Acum să ne uităm la componentele sale mai detaliat folosind figură.

Verificarea numerelor cardurilor de credit

Sarcină. Este necesar să se verifice corectitudinea numărului de card de plastic introdus pentru cele mai comune sisteme de plată. Opțiune luată în considerare numai pentru carduri

Soluţie. Atunci când creați o expresie, trebuie să țineți cont de posibila prezență a spațiilor în numărul introdus. Numerele de pe card sunt împărțite în grupuri pentru a ușura citirea și dictarea. Prin urmare, este destul de natural ca o persoană să încerce să introducă numărul în acest fel (adică folosind spații).

Scrierea unei expresii universale care ia în considerare posibilele spații și cratime este mai dificilă decât pur și simplu aruncarea tuturor caracterelor, cu excepția numerelor. Prin urmare, se recomandă utilizarea metacaracterului /D în expresie, care elimină toate caracterele, cu excepția numerelor.

Acum puteți trece direct la verificarea numărului. Toate companiile de carduri de credit folosesc un format de număr unic. Exemplul folosește acest lucru, iar clientul nu trebuie să introducă numele companiei - acesta este determinat de număr. Cardurile Visa încep întotdeauna cu 4 și au o lungime a numărului de 13 sau 16 cifre. MasterCard începe în intervalul 51-55 cu o lungime a numărului de 16. Ca rezultat, obținem următoarea expresie:

Înainte de procesarea comenzii, puteți efectua o verificare suplimentară a ultimei cifre a numărului, care este calculată folosind algoritmul Luhn.

Verificarea numerelor de telefon

Sarcină. Verificarea corectitudinii numărului de telefon introdus.

Soluţie. Numărul de cifre din numerele de telefon fix și mobil variază semnificativ de la țară la țară, așa că nu este posibil să se verifice universal dacă un număr de telefon este corect folosind expresii regulate. Dar numerele internaționale au un format strict și sunt grozave pentru verificarea șablonului. Mai mult, tot mai mulți operatori naționali de telefonie încearcă să respecte un singur standard. Structura numărului este următoarea:

+CCC.NNNNNNNNNNxEEEE, Unde:

C este codul țării, format din 1-3 cifre.

N - număr de până la 14 cifre.

E - extensie opțională.

Plusul este un element necesar, iar semnul x este prezent doar atunci când este necesară extinderea.

Ca urmare, avem următoarea expresie:

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

Numerele din interval

Sarcină. Trebuie să potriviți un număr întreg într-un anumit interval. În plus, este necesar ca expresiile regulate să se potrivească numai cu numere dintr-un interval de valori.

Soluţie. Iată câteva expresii pentru câteva dintre cele mai frecvente cazuri:

Găsirea unei adrese IP

Sarcină. Trebuie să determinați dacă șirul dat este o adresă IP validă în format IPv4 în intervalul 000.000.000.000-255.255.255.255.

Soluţie. Ca și în cazul oricărei sarcini din PHP, expresiile regulate au multe variații. De exemplu, aceasta:

Verificarea expresiei online

Testarea expresiilor regulate pentru corectitudine poate fi dificilă pentru programatorii noi din cauza complexității sintaxei, care diferă de limbajele de programare „obișnuite”. Pentru a rezolva această problemă, există multe teste de expresii online care facilitează verificarea corectitudinii șablonului creat pe text real. Programatorul introduce expresia și datele de testat și vede instantaneu rezultatul procesării. De obicei, există și o secțiune de referință în care sunt descrise în detaliu expresiile regulate, exemplele și diferențele de implementare pentru cele mai comune limbaje de programare.

Dar încrederea totală în rezultatele serviciilor online nu este recomandată tuturor dezvoltatorilor care folosesc PHP. O exprimare regulată, scrisă și testată personal, îți îmbunătățește abilitățile și garantează absența erorilor.

Expresiile regulate sunt un instrument foarte util pentru dezvoltatori. Ele pot fi folosite pentru a găsi, identifica sau înlocui text, cuvinte sau orice alte caractere. Articolul de astăzi conține 15 dintre cele mai utile expresii regulate care vor fi utile oricărui dezvoltator web.

Introducere în expresiile regulate

Mulți dezvoltatori noi consideră că expresiile regulate sunt foarte greu de înțeles și de utilizat. De fapt, totul nu este atât de dificil pe cât ar părea. Înainte de a intra în expresiile regulate în sine, cu codul lor util și versatil, să aruncăm o privire la elementele de bază:

Sintaxa expresiei regulate

Expresia regulată Mijloace
foo Șirul „foo”
^foo Linia începe cu „foo”
foo$ Linia se termină cu „foo”
^foo$ „foo” apare o singură dată pe rând
a, b sau c
orice caracter mic
[^A-Z] orice personaj care nu este în majuscule
(gif|jpg) Înseamnă atât „gif” cât și „jpeg”
+ Unul sau mai multe caractere mici
Orice număr, punct sau semn minus
^{1,}$ Orice cuvânt, cel puțin o literă, număr sau _
()() wy, wz, xy sau xz
(^A-Za-z0-9) Orice caracter (nu un număr sau o literă)
({3}|{4}) Înseamnă trei litere sau 4 numere

Funcții PHP pentru expresii regulate

Funcţie Descriere
preg_match() Funcția preg_match() caută un șir folosind un model dat, returnează adevărat dacă șirul este găsit și fals în caz contrar
preg_match_all() Funcția preg_match_all() găsește toate aparițiile unui șir dat un model
preg_replace() Funcția preg_replace() funcționează pe același principiu ca și ereg_replace(), cu excepția faptului că expresiile regulate pot fi folosite pentru a specifica atât modelul de căutare, cât și șirul cu care să înlocuiască valoarea găsită.
preg_split() Funcția preg_split() acționează la fel ca split(), cu excepția faptului că o expresie regulată poate fi folosită ca parametru pentru modelul de căutare.
preg_grep() Funcția preg_grep() caută toate elementele matricei de intrare, returnând toate elementele care se potrivesc cu modelul expresiei regulate.
preg_quote() Escape caractere cu expresii regulate

Verificarea numelui de domeniu

Verificarea dacă un șir este un nume de domeniu valid

$url = "http://komunitasweb.com/"; if (preg_match("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $url)) ( echo "Adresa URL este ok ."; ) else ( echo „Adresă URL greșită.”; )

Evidențierea unui cuvânt în text

Aceasta este o expresie regulată foarte utilă, cu ajutorul ei puteți găsi cuvântul dorit și îl puteți evidenția. Deosebit de util pentru afișarea rezultatelor căutării.

$text = "Exemplu de propoziție de la KomunitasWeb, regex a devenit popular în programarea web. Acum învățăm regex. Conform wikipediei, expresiile regulate (abreviate ca regex sau regexp, cu forme de plural regex, regexps sau regexen) sunt scrise într-un mod formal limbaj care poate fi interpretat de un procesor de expresii regulate”; $text = preg_replace("/b(regex)b/i", " 1", $text); echo $text;

Evidențierea rezultatelor căutării într-un blog WordPress

După cum sa menționat în exemplul anterior, acest exemplu de cod este convenabil de utilizat în rezultatele căutării și este o modalitate excelentă de a implementa această funcție într-un blog WordPress.

Deschideți fișierul search.php și găsiți funcția the_title(). Înlocuiește-l cu următorul cod:

Echo $titlu;

Acum, deasupra acestei linii, adăugați acest cod:

\0", $titlu); ?>

Salvați fișierul search.php și deschideți style.css. Adăugați următorul rând:

Strong.search-extras ( fundal: galben; )

Obținerea tuturor imaginilor dintr-un document HTML

Dacă ați avut vreodată nevoie să obțineți toate imaginile de pe o pagină web, acest cod este obligatoriu. Puteți crea cu ușurință un program de descărcare a imaginilor folosind puterea cURL

$imagini = array(); preg_match_all("/(img|src)=("|\")[^"\">]+/i", $date, $media); unset($date); $date = preg_replace("/(img|src)("|\"|="|=\")(.*)/i", "$3", $media); foreach ($date ca $url) ( $info = pathinfo($url); if (isset($info["extension"])) ( if (($info["extension"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($ imagini, $url);

Eliminați cuvintele duplicate (indiferență majuscule și minuscule)

Cuvintele se repetă frecvent în timpul tastării? Această expresie regulată va ajuta.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Eliminarea semnelor de punctuație duplicate

Același lucru, doar pentru punctuație. Spune la revedere virgulelor duble.

$text = preg_replace("/.+/i", ".", $text);

Căutați etichete XML/HTML

Acest funcție simplă, are două argumente. Prima este eticheta pe care trebuie să o găsiți, iar a doua este o variabilă care conține XML sau HTML. Din nou, această funcție este foarte convenabilă de utilizat împreună cu cURL.

Funcția get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all ("(<".$tag."[^>]*>(.*?).")", $xml, $potriviri, PREG_PATTERN_ORDER);

returnează $match-uri; )

Căutați etichete XHTML/XML cu o anumită valoare de atribut Această caracteristică este foarte asemănătoare cu cea anterioară, cu excepția faptului că puteți seta eticheta atributul necesar

.

. De exemplu, puteți găsi cu ușurință<(".$tag.")[^>Funcția get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $value = preg_quote($value_regex = "/);<\/\\1>]*$attr\s*=\s*". "(["\"])$valoare\\2[^>]*>(.*?)

/" preg_match_all($tag_regex, $xml, $match, PREG_PATTERN_ORDER); returnează $potriviri; )

Găsirea valorilor de culoare hexazecimale

Un alt instrument util pentru dezvoltatorii web! Vă permite să găsiți/verificați valorile de culoare hexazecimale.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $șir)) ( echo "exemplul 6 cu succes."; )

Căutați titlul articolului Acest fragment de cod va găsi și afișa text în interiorul etichetelor

, pe o pagină html. (.*)$fp = fopen("http://www.catswhocode.com/blog","r"); while (!feof($fp))( $pagina .= fgets($fp, 4096); ) $titre = eregi("

",$pagina,$regs); echo $regs; fclose($fp);

Analizarea jurnalelor Apache

//Jurnale: server web Apache //Accesări reușite numai la fișierele HTML. Util pentru numărarea numărului de vizualizări ale paginilor. „^((?#IP client sau nume de domeniu)S+)s+((?#autentificare de bază)S+s+S+)s+[((?#date și oră)[^]]+)]s+”(?: GET|POST|HEAD) ((?#fișier)/[^ ?]+?.html?)??((?#parametri)[^ ?]+)? HTTP/+"s+(?#codul de stare)200s+((?#bytes transfered)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent) )[^"]*)"$" //Înregistrări: server web Apache //doar erori 404 "^((?#IP client sau nume de domeniu)S+)s+((?#autentificare de bază)S+s+S+) s+[((?#data si ora)[^]]+)]s+"(?:GET|POST|HEAD) ((?#fisier)[^ ?"]+)??((?#parametri)[ ^ ?"]+)? HTTP/+"s+(?#codul de stare)404s+((?#bytes transfered)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent) )[^"]*)"$"

Înlocuirea ghilimelelor duble cu ghilimele inteligente

Dacă sunteți un iubitor de tipografie, vă va plăcea acest înlocuitor de expresii regulate pentru expresiile obișnuite. ghilimele duble, cu „ghilimele inteligente”. O expresie regulată similară este utilizată în WordPress în conținutul paginii.

Preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $text);

Verificare completă a parolei

Această expresie regulată va asigura că în câmpul de text sunt introduse cel puțin șase caractere, numere, cratime și liniuțe de subliniere.

Câmpul de text trebuie să conțină cel puțin un caracter majuscule, un caracter mic și un număr.

„A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

WordPress: Utilizarea expresiei regulate pentru a obține imagini dintr-o postare

Deoarece mulți dintre voi sunteți utilizatori WordPress, este posibil să aveți nevoie de un cod care vă permite să obțineți toate imaginile din textul unui articol și să le afișați.

Pentru a utiliza acest cod, pur și simplu lipiți-l în orice fișier din tema dvs.

post_conținut; $szSearchPattern = "~ ]* />~"; // Rulați preg_match_all pentru a prelua toate imaginile și a salva rezultatele în $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Verificați dacă avem cel puțin o imagine $iNumberOfPics = count($aPics if ($iNumberOfPics > 0) ( // Acum aici ați face tot ce trebuie să faceți cu imaginile // Pentru acest exemplu imaginile sunt afișate doar pentru ($i=0; $i);< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Generarea de emoticoane automate

O altă caracteristică folosită în wordpress este că vă permite să înlocuiți automat caracterele emoji cu o imagine emoji.

$texte="Un text cu zâmbet:-)"; echo str_replace(":-)"," ",$text);

Acest articol oferă o selecție de exemple de expresii regulate PHP. O colecție foarte frumoasă și utilă de exemple de expresii regulate. Toate exemplele de expresii regulate sunt acceptabile pentru PHP. Bucură-te de el pentru sănătatea ta!

Exemplu de verificare a numelui de domeniu

Acest fragment php verifică dacă șirul este un nume de domeniu valid.

?:.*)+):?(d+)?/?/i", $url)) ( echo "Adresa URL este ok."; ) else ( echo "Adresa URL greșită."; )

Exemplu de evidențiere a unui cuvânt în text

O expresie regulată foarte utilă pentru căutarea și evidențierea cuvântului dorit în text. Codul este util în special la crearea rezultatelor căutării.

$text = "Exemplu de propoziție de la KomunitasWeb, regex a devenit popular în programarea web. Acum învățăm regex. Conform wikipediei, expresiile regulate (abreviate ca regex sau regexp, cu forme de plural regex, regexps sau regexen) sunt scrise într-un mod formal limbaj care poate fi interpretat de un procesor de expresii regulate”; $text = preg_replace("/b(regex)b/i", " 1", $text); echo $text;

Un exemplu de implementare a evidențierii rezultatelor căutăriiWordPress

Deschideți fișierul search.php și găsiți funcția the_title(). Înlocuiește-l cu următoarea linie:

Echo $titlu;

Acum, înainte de linia înlocuită, introduceți acest cod:

\0", $titlu); ?>

Salvați fișierul search.php și deschideți style.css. Adăugați următoarea linie la acesta:

Strong.search-extras ( fundal: galben; )

Un exemplu de obținere a imaginilor de laMetoda HTML regexp

Această bucată de cod php folosind expresii regulate caută toate imaginile și adresa URL la ei.

$imagini = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $date, $media); unset($date); $date=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($date ca $url) ( $info = pathinfo($url); if (isset($info["extension"])) ( if (($info["extension"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($ imagini, $url);

Eliminarea cuvintelor duplicate (indiferență majuscule și minuscule)

Există adesea cuvinte care se repetă? Atunci acest exemplu de expresie regulată vă va fi util.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Eliminarea punctelor duplicate

Același lucru, doar cu puncte repetate.

$text = preg_replace("/.+/i", ".", $text);

Potrivirea etichetelor XML/HTML

Această funcție simplă are două argumente: o etichetă (pe care doriți să o potriviți), xml sau cod html.

Funcția get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all ("(<".$tag."[^>]*>(.*?).")", $xml, $potriviri, PREG_PATTERN_ORDER);

Căutați etichete XHTML/XML cu anumite valori ale atributelor

Acest exemplu este similar cu funcția anterioară, doar că puteți extinde semnificativ căutarea, de exemplu găsiți

.

. De exemplu, puteți găsi cu ușurință<(".$tag.")[^>Funcția get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $value = preg_quote($value_regex = "/);<\/\\1>]*$attr\s*=\s*". "(["\"])$valoare\\2[^>]*>(.*?)

Găsirea valorilor de culoare hexazecimale

Excelent exemplu de expresie regulată care caută o potrivire valori hexazecimale culorile în linii date. Pentru ce este asta? Poate doriți să scrieți un serviciu pentru a comprima codul CSS sau ceva similar.

Un alt instrument util pentru dezvoltatorii web! Vă permite să găsiți/verificați valorile de culoare hexazecimale.

Exemplu de căutaretitlu pe o pagină dată

Acest exemplu interesant de cod PHP cu expresia regulată găsește și returnează text între etichete Mai sus am luat deja în considerare astfel de simboluri care indică numărul de simboluri anterioare, cum ar fi.

Feof($fp))( $pagina .= fgets($fp, 4096); ) $titre = eregi(" (.*)$fp = fopen("http://www.catswhocode.com/blog","r"); while (!feof($fp))( $pagina .= fgets($fp, 4096); ) $titre = eregi("

Analiza jurnalelor Apache

Cele mai multe site-uri funcționează pe cunoscute Servere Apache. Dacă site-ul dvs. rulează și pe acesta, atunci puteți analiza jurnalul serverului folosind php expresie regulată.

//Jurnale: server web Apache //Accesări reușite numai la fișierele HTML. Util pentru numărarea numărului de vizualizări ale paginilor. „^((?#IP client sau nume de domeniu)S+)s+((?#autentificare de bază)S+s+S+)s+[((?#date și oră)[^]]+)]s+”(?: GET|POST|HEAD) ((?#fișier)/[^ ?]+?.html?)??((?#parametri)[^ ?]+)? HTTP/+"s+(?#codul de stare)200s+((?#bytes transfered)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent) )[^"]*)"$" //Înregistrări: server web Apache //doar erori 404 "^((?#IP client sau nume de domeniu)S+)s+((?#autentificare de bază)S+s+S+) s+[((?#data si ora)[^]]+)]s+"(?:GET|POST|HEAD) ((?#fisier)[^ ?"]+)??((?#parametri)[ ^ ?"]+)? HTTP/+"s+(?#codul de stare)404s+((?#bytes transfered)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent) )[^"]*)"$"

Exemplu de verificare a complexității parolei

Un exemplu excelent de expresie regulată care verifică nivelul de complexitate al unei parole. Parola trebuie să aibă 6 caractere și să conțină cel puțin un caracter majuscul, un caracter mic și un număr.

„A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

Înlocuirea emoticoanelor text cu emoticoane grafice

Acest exemplu de cod se va schimba emoticon text, la graficul dvs. Fragment PHP interesant și util.

$texte="Un text cu zâmbet:-)"; echo str_replace(":-)"," ",$text);

Exemplu de expresie regulată din care să obțineți imaginicod html

Merită să spui asta dat php Codul este folosit în wordpress pentru a căuta și procesa imagini.

post_conținut; $szSearchPattern = "~ ]* />~"; // Rulați preg_match_all pentru a prelua toate imaginile și a salva rezultatele în $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Verificați dacă avem cel puțin o imagine $iNumberOfPics = count($aPics if ($iNumberOfPics > 0) ( // Aici vă puteți procesa imaginile // În acest exemplu, acestea vor fi pur și simplu afișate pe monitor pentru ($i=0; $i);< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Sper că ați găsit colecția utilă exemple php expresie regulată. Dacă există completări interesante sau exemple de expresii regulate (php), scrieți în comentarii.

PHP regexp este un algoritm puternic de potrivire a modelelor care poate fi realizat într-o singură expresie. Expresiile regulate PHP folosesc operatori aritmetici (cum ar fi +, -, ^) pentru a crea expresii complexe.

Pentru ce sunt folosite expresiile regulate:

  • Expresiile regulate facilitează identificarea datelor șir prin apelarea unei singure funcții. Acest lucru economisește timp la scrierea codului;
  • La validarea introducerii utilizatorului, cum ar fi o adresă e-mail, domeniul site-ului, numărul de telefon, adresa IP;
  • Selecţie cuvinte cheieîn rezultatele căutării;
  • Expresiile regulate pot fi folosite pentru a identifica etichetele și pentru a le înlocui.

Expresii regulate în PHP

PHP conține funcții încorporate care vă permit să lucrați cu expresii regulate. Acum să ne uităm la funcțiile PHP utilizate în mod obișnuit pentru expresii regulate.

  • preg_match - Folosit pentru a efectua potrivirea modelului de șir. Returnează adevărat dacă este găsită o potrivire și false dacă nu este găsită nicio potrivire;
  • preg_split - folosit pentru a împărți un șir după un model, rezultatul este returnat ca o matrice numerică;
  • preg_replace – folosit pentru a căuta un model și a înlocui cu un șir specificat.

Mai jos este sintaxa funcțiilor de expresie regulată, cum ar fi preg_match, preg_split sau PHP regexp replace:

„function_name” este fie preg_match, preg_split, fie preg_replace.
„/…/” - barele oblice indică începutul și sfârșitul unei expresii regulate.
„‘/pattern/”” este modelul pe care trebuie să-l potrivim.
„obiect” este șirul cu care se potrivește modelul.

Acum să luăm în considerare exemple practice folosind funcțiile menționate mai sus.

Preg_metch

Primul exemplu folosește funcția preg_match pentru a realiza o potrivire simplă de model pentru cuvântul guru într-o anumită adresă URL.

Codul de mai jos arată o implementare a acestui exemplu:


Să ne uităm la partea din cod care este responsabilă pentru ieșire "preg_match('/guru/', $my_url)".

„preg_match(…)” este funcția PHP potrivire regexp.
„‘/Guru/”” este un model de expresie regulată.
„$My_url” este o variabilă care conține textul cu care se potrivește modelul.

Preg_split

Să ne uităm la un alt exemplu care utilizează funcția preg_split.

Vom lua o frază și o vom împărți într-o matrice; modelul este conceput pentru a se potrivi cu un singur spațiu:

Preg_replace

Luați în considerare funcția preg_replace, care efectuează o potrivire a modelului și înlocuiește rezultatul potrivit cu un alt șir.

Codul de mai jos caută cuvântul guru într-un șir. El o înlocuiește cod css care stabilește culoarea de fundal:

Guru", $text); echo $text; ?>

Metacaracterele

S-au folosit exemplele de mai sus șabloane simple. Metacaracterele permit potrivirea mai complexă a modelelor regexp PHP, cum ar fi validarea adresei de e-mail. Să ne uităm la metacaracterele utilizate în mod obișnuit.

Metacaracter Descriere Exemplu
. Se potrivește cu orice caracter, altul decât un caracter nou linie. /./ - orice conține un caracter.
^ Marchează începutul unei linii, excluzând caracterul /. /^PH/ este orice șir care începe cu PH.
$ Indică un model la sfârșitul unei linii. /com$/ - guru99.com, yahoo.com etc.
* Indică orice număr de caractere, zero sau mai multe. /com*/ - computer, comunicare etc.
+ Necesită ca caracterul (personajele) să apară cel puțin o dată înaintea metacaracterului. /yah+oo/ - yahoo.
Simbol de evacuare. /yahoo+.com/ - ia punctul ca un sens literal.
[…] Clasa de caractere. // - abc.
a-z Indică litere mici. /a-z/ - cool, fericit etc.
A-Z Indică litere mari. /A-Z/ - CE, CUM, DE CE etc.
0-9 Reprezintă orice numere de la 0 la 9. /0-4/ — 0,1,2,3,4.

Acum să ne uităm la un exemplu complex PHP regexp care verifică validitatea unei adrese de e-mail:

Rezultat: adresa de e-mail [email protected] este valabil.

Explicația modelului „+@+.(2.5)$/] „

„‘/…/”” începe și se termină expresia regulată.
„^” se potrivește cu orice literă mică sau mare, numere de la 0 la 9 și puncte, litere de subliniere sau liniuțe.
„+@” se potrivește cu simbolul @ urmat de litere mici sau mari, numere de la 0 la 9 sau cratime.
„+.(2,5)$/” specifică un punct folosind o bară oblică inversă, urmată de orice litere mici sau mari, numărul de caractere de la sfârșitul rândului trebuie să fie între 2 și 5.