Funcții php expresii regulate. Expresii regulate în PHP. Un exemplu de obținere de imagini din HTML folosind metoda regexp

amestecat preg_match(model șir, subiect șir [, matrice &potriviri [, int steag [, int offset]]])

Caută în subiectul textului dat potriviri cu modelul

Dacă este specificat parametrul de potrivire suplimentar, acesta va fi completat cu rezultatele căutării. Elementul $matches va conține porțiunea șirului care se potrivește cu întregul model, $match va conține porțiunea șirului care se potrivește cu primul submodel și așa mai departe.

steagurile pot lua următoarele valori:

PREG_OFFSET_CAPTURE

Dacă este specificat acest flag, pentru fiecare subșir găsit va fi indicată poziția sa în șirul sursă. Este important de reținut că acest flag modifică formatul datelor returnate: fiecare apariție este returnată ca un tablou, al cărui element zero conține subșirul găsit, iar primul element conține offset.

Acest steag este disponibil în PHP 4.3.0 și o versiune ulterioară. Parametru suplimentar

flags este disponibil începând cu PHP 4.3.0.

Căutarea se efectuează de la stânga la dreapta, de la începutul liniei. Parametrul opțional de offset poate fi utilizat pentru a specifica o poziție alternativă de pornire pentru căutare. Parametrul suplimentar de offset este disponibil începând cu PHP 4.3.3. Comentariu: Folosirea parametrului offset nu este echivalentă cu înlocuirea șirului potrivit cu substr($subject, $offset) atunci când apelați funcția preg_match_all() ^ , $ , deoarece modelul poate conține condiții precum (? sau

.

Comparaţie: În timp ce acest exemplu Funcţie În timp ce acest exemplu preg_match() Folosirea parametrului offset nu este echivalentă cu înlocuirea șirului potrivit cu substr($subject, $offset) atunci când apelați funcția returnează numărul de potriviri găsite. În timp ce acest exemplu Poate fi 0 (nu s-au găsit potriviri) și 1 deoarece nu mai funcționează după primul meci găsit. Dacă trebuie să găsiți sau să numărați toate potrivirile, ar trebui să utilizați funcția.

Funcţie se întoarce În timp ce acest exemplu FALS în cazul în care apar erori în timpul execuției. Cheie: Nu utilizați funcția, dacă trebuie să verificați prezența unui subșir într-un șir dat.


Utilizați pentru asta

/*
strpos()
sau
strstr()
*/
, deoarece vor îndeplini această sarcină mult mai repede. Exemplul 2. Căutați cuvântul „web” în text)) {
ecou „Intrare găsită”.;
) altfel (
ecou „Nu a fost găsită nicio intrare.”;
)preg_match ("/\bweb\b/i" , „PHP este limbajul de script pentru site-ul web preferat.”)) {
ecou „Intrare găsită”.;
) altfel (
ecou „Nu a fost găsită nicio intrare.”;
}
?>

O notă despre expresiile regulate. De ce sunt necesare, unde sunt folosite și cum să le folosească. Cu alte cuvinte, despre căutarea în PHP.

Expresii regulate este un set de indicatori care sunt utilizați în căutare pentru a găsi datele necesare.

Folosind expresii regulate în funcțiile PHP, înlocuiți, căutați.

De exemplu, luați în considerare această funcție:

preg_replace ("/( ]*>)(.*?)(<\/div>)/i", "$1$3", $șir);

Ceea ce se află în interiorul acestei funcții, toate aceste valori aparent de neînțeles, se numește expresie regulată (PHP RegEx). Sunt folosite pentru a căuta date specifice.

Modelul de căutare (caracterele) provine din limbă Perl.

Expresiile regulate sunt împărțite în metacaractereleŞi modificatori metacaracterele.

Metacaractere — definesc un grup de caractere obișnuite. Modificatorii vă ajută să înțelegeți câte și câte dintre aceste personaje să căutați.

Metacaracterele expresiei regulate

Semnificațiile unor metacaractere din exemplul de mai sus (vor apărea și mai jos):

^ - începutul liniei
\ - tratați următorul element ca pe un caracter obișnuit (nu o comandă)
. - un simbol arbitrar (orice simbol aleatoriu).
() - grupare (submască)
- clasa de caractere
$ - sfârșitul rândului
| - alternativă (sau)

Modificatori de expresie regulată

* - repeta de la 0 la infinit
? - caută 1 dată sau mai puțin

Mai mulți modificatori, dar nu sunt utilizați în exemplele curente:

Repetați de 1 sau de mai multe ori
(n) - numărul exact de ori (înlocuiește n cu un număr)
(n,5) - de cel puțin 5 ori
(n,m) - nu mai puțin de n, dar nu mai mult de m

Oricare dintre modificatorii de mai sus poate fi combinat cu modificatorul „?”. Este necesar să se limiteze căutarea deoarece implicit toate metacaracterele sunt repetate conform principiului „lacomie” (fără limită).

De exemplu:

(<.*>) - va găsi întregul șir cu toate etichetele
(<.*?>) - va găsi doar etichete

Opțiuni suplimentare

Pe lângă modificatori și metacaractere, există opțiuni (nu toate sunt listate):

/i - litera nu contează (minuscule și majuscule)
/s - face puncte (.) întreruperi de linie și întoarcere de cărucior (deplasare la stânga).
/U - transformă toate metacaracterele cantitative în „non-lacom”.

Opțiunile pot fi combinate împreună:

Șabloane

Există, de asemenea, modele, ceva ca un analog al metacaracterelor, unul dintre ele:

\n - linie nouă

Această pagină nu listează toate opțiunile de expresie regulată. Acest lucru se face special pentru a nu deruta începătorul și, în același timp, pentru a-i oferi instrumentele de bază pentru căutare. Pe viitor, dacă doriți să intrați în mai multe detalii, puteți găsi instrucțiuni mai detaliate pe Internet.

Experimente

Puteți experimenta cu expresii regulate pe acest site. Introduceți o expresie regulată în partea de sus și în partea de jos date htmlîn care cauți. La selecție corectă Expresia regulată va evidenția secțiunea de cod de care aveți nevoie.

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 caracter care nu este 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
În timp ce acest exemplu Funcția preg_match() caută un șir folosind un model dat, returnează adevărat dacă șirul este găsit și fals în caz contrar
Folosirea parametrului offset nu este echivalentă cu înlocuirea șirului potrivit cu substr($subject, $offset) atunci când apelați funcția 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

Verificați dacă șirul este corect nume de domeniu

$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);

Eliminarea cuvintelor 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

Această 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ă funcție este foarte asemănătoare cu cea anterioară, cu excepția faptului că puteți da etichetei atributul dorit. 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

Majoritatea site-urilor rulează pe binecunoscutul server web Apache. Dacă site-ul tău este unul dintre ele, de ce să nu folosești PHP și expresii regulate pentru a analiza jurnalele 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) )[^"]*)"$"

Dacă sunteți un pasionat de tipografie, vă va plăcea această expresie regulată care înlocuiește ghilimele duble obișnuite 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ă cod phpși folosind expresii regulate, caută toate imaginile și adresa URL către acestea.

$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

.

Această funcție este foarte asemănătoare cu cea anterioară, cu excepția faptului că puteți da etichetei atributul dorit. 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

Un exemplu excelent de expresie regulată care se potrivește cu valorile de culoare hexazecimale în șiruri date. Pentru ce este asta? Poate doriți să scrieți un serviciu de compresie a codului 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 Cod PHP cu expresii regulate caută și returnează text între etichete Şi.

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

Majoritatea site-urilor rulează pe servere Apache bine-cunoscute. Dacă site-ul dvs. rulează și pe acesta, atunci puteți analiza jurnalul serverului folosind php regexp.

Majoritatea site-urilor rulează pe binecunoscutul server web Apache. Dacă site-ul tău este unul dintre ele, de ce să nu folosești PHP și expresii regulate pentru a analiza jurnalele Apache?

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 utilă această colecție de exemple de expresii regulate PHP. Dacă există completări interesante sau exemple de expresii regulate (php), scrieți în comentarii.