Expresii regulate înlocuirea caracterelor php. Expresii regulate PHP. Clase de caractere excluse

PHP, așa cum se potrivește unui limbaj de programare modern, oferă dezvoltatorului un set de funcții pentru utilizarea expresiilor regulate. Puteți căuta aparițiile șirurilor în alte șiruri folosind criterii complexe.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Sortare după Opțiunea 1 grupează rezultatele căutării după numărul expresiei regulate (prestabilit). În al doilea caz, rezultatele sunt grupate după locația lor în rând.

Simbol - element șablon

Este important să rețineți că șablonul operează pe simboluri. Programarea a uitat de mult care este tipul de date „caracter”. Limbile moderne nu coboară sub conceptul de „șir”, dar în ceea ce privește modelul, trebuie să înțelegeți: simbolurile sunt manipulate aici.

Construirea unui șablon înseamnă, în primul rând, specificarea secvenței necesare de caractere. Dacă înțelegeți clar acest lucru, atunci nu vor exista erori în șablon. În orice caz, va fi mult mai puțin.

  • a este un element specific al șablonului - un simbol.
  • a-z este un element șablon, de asemenea, un caracter, dar numai cu valoarea de la a la z - toate latine cu litere mici.
  • 0-9 este un număr, orice număr, dar 1-3 este doar 1, 2 sau 3.

Cazul în model este important. Primele și ultimele caractere ale modelului sunt semnificative. Puteți specifica unde începe și unde se termină șablonul.

Șablon de funcție

PHP preg match all folosește sintaxa standard a expresiilor regulate. indicați unul dintre simbolurile indicate în ele:

  • numai caracterele a, b, c.
  • [^ABC] totul, cu excepția caracterelor A, B, C.
  • \w și \W - caracter text sau non-text.
  • \s și \S - caracter de spațiu alb sau non-spațiu alb.
  • \d și \D - cifră sau necifră.

Caracterele repetate sunt indicate prin acolade - (n,m) și se referă la caracterul anterior.

  • n denotă repetarea „nu mai puțin decât”;
  • m - repetarea „nu mai mult”.

Sintaxa oferă multe opțiuni pentru crearea șabloanelor, dar cel mai bine este să începeți cu elementele de bază, adică cu cele simple scrise cu propria mână, în care elementele și combinațiile complexe sunt absente.

Mai simplu spus, prin enumerarea caracterelor reale care sunt necesare, indicând cantitățile lor necesare și ținând cont de faptul că caracterul „^” corespunde începutului, iar „$” la sfârșitul rândului, puteți crea șabloane simple. Prin analizarea expresiilor regulate reale, bine depanate de la experți calificați, puteți obține cunoștințe solide pentru a crea aplicații complexe ale preg match all. Arsenalul PHP nu se limitează doar la aceste două funcții, dar sunt cele mai frecvent utilizate.

Practică simplă

Model întreg:

  • "/*/"

De asemenea, un model întreg, dar poate exista un semn în față ("+", "-") și pot exista spații suplimentare în față/spate:

  • /^[\s|\+|\-](0,1)*/

De asemenea:

  • /^[\s|\+|\-](0,1)*(\.)*/ - un număr cu un punct.
  • /+@+\.(2,3)/ - opțiune pentru recunoașterea e-mailului.

Utilizarea propriilor șabloane pentru preg match all, exemple de ele pe Internet, analiza codului paginilor site-ului web și a altor surse vă permite să vă creați propria bibliotecă de șabloane.

Există multe opțiuni pentru a găsi informații. În special, ultimele două construcții prezentate mai sus pot fi modelate diferit. În multe cazuri, se va acorda preferință șablonului care oferă potrivirea dorită mai rapid și mai precis. Folosirea preg match all în PHP, precum și a funcțiilor similare în alte limbi, necesită practică, atenție și verificarea prealabilă a corectitudinii șabloanelor.

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 a acestora.

$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["extensie"] == "jpeg") || ($info["extensie"] == "gif") || ($info["extensie"] == "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); returnează $match; )

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

.

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); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$valoare\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $match, PREG_PATTERN_ORDER); returnează $potriviri; )

Găsirea valorilor de culoare hexazecimale

Un exemplu grozav de expresie regulată care se potrivește cu valorile de culoare hexazecimale în șiruri date. Pentru ce e asta? Poate doriți să scrieți un serviciu de compresie a codului CSS sau ceva similar.

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

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 Și.

Feof($fp))( $pagina .= fgets($fp, 4096); ) $titre = eregi(" (.*)",$pagina,$regs); echo $regs; fclose($fp);

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.

//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 va schimba emoticonul text cu cel grafic. 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ă spus că acest cod php 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.

Descrierea funcției:

Funcția preg_replace caută potriviri ale unei expresii regulate (model) cu date dintr-un șir (subiect) și le înlocuiește cu datele găsite în înlocuire.

Argument

Descriere

model

Argument necesar. Expresie regulată (model de căutare)

șir, matrice

înlocuire

Argument necesar. Un șir sau o matrice care conține date utilizate pentru a înlocui datele în subiect

De asemenea, puteți utiliza o construcție de forma \$(1) pentru legături, care este echivalentă cu \$1; această construcție este folosită dacă legătura este urmată imediat de un număr (\$(1)1).

șir, matrice
subiect Argument necesar. Un șir sau o matrice care conține datele care vor fi înlocuite. șir, matrice
limită

Argument opțional. Număr maxim de înlocuiri. Implicit este -1 (nelimitat)

int
numara

Argument opțional. O variabilă care conține numărul de înlocuiri efectuate.

int

Funcția preg_replace() poate fi utilizată cu modificatorul /e. Când acest modificator este prezent, parametrul de înlocuire este interpretat ca cod PHP și apoi folosit pentru înlocuire.

Expresii obisnuite

Separat, ar trebui să ne oprim asupra expresiilor regulate, fără o înțelegere a cărora este destul de dificil (dacă nu imposibil) să înțelegem activitatea funcției. preg_replace().

O descriere destul de bună a expresiilor regulate este oferită pe wikipedia.org, sunt descrise și punctele principale ale utilizării expresiilor regulate.

Exemple:

Exemplul 1:

În acest exemplu, înlocuim toate numerele plasate între paranteze cu asteriscuri.

Exemplul 2:

În acest exemplu, înlocuim șirul corespunzător întregului model cu datele corespunzătoare primului submodel la referința \$1. Cu alte cuvinte, „au 3 mere” corespunzător lui „/(\w+) (\d+) (\w+)/” va fi înlocuit cu „au” corespunzător lui (\w+).

Exemplul 3:

Acest exemplu arată ce se întâmplă dacă utilizați matrice ca model și înlocuire.

Exemplul 4:

Acest exemplu arată ce se întâmplă dacă utilizați matrice ca model, înlocuire și subiect.

Exemplul 5:

Acest exemplu arată utilizarea modificatorului /e, adică atunci când înlocuirea este interpretată ca cod php. Mai jos este conversia caracterelor din litere mici în majuscule.

Exemplul 6:

Acest exemplu arată utilizarea argumentului count. Aici rezultatul va fi egal cu 2, deci au fost două înlocuiri.

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 să ne amintim 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ă.

Parametrul steaguri suplimentar 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.

Cometariu: 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 preg_match() returnează numărul de potriviri găsite. Poate fi 0 (nu s-au găsit potriviri) și 1 deoarece preg_match() 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 preg_match_all(). Funcţie preg_match() se intoarce FALSîn cazul în care apar erori în timpul execuției.

Cheie: Nu utilizați funcția preg_match(), 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

/*
Secvența specială \b din model înseamnă o limită de cuvânt,
prin urmare, doar o apariție izolată a cuvântului „web” se va potrivi
mască, spre deosebire de „pânză” sau „pânză de păianjen”.
*/
if (preg_match("/\bweb\b/i" , „PHP este limbajul de scripting web preferat.”)) {
ecou „Intrare găsită”.;
) altfel (
ecou „Nu a fost găsită nicio intrare”.;
)preg_match ("/\bweb\b/i" , „PHP este limbajul de scriptare preferat pentru site-uri.”)) {
ecou „Intrare găsită”.;
) altfel (
ecou „Nu a fost găsită nicio intrare”.;
}
?>

De mult îmi doresc să înțeleg expresiile regulate. Deși „dați seama” este un cuvânt puternic. Pentru a stăpâni marea artă de a deveni un maestru al expresiilor regulate, trebuie să lucrezi constant cu ele. Nu este suficient să înveți sintaxa, caracterele speciale și modificatorii - trebuie să le poți folosi. Iar capacitatea de utilizare vine cu experiență.

În această postare voi posta exemple de utilizare a expresiilor regulate, a căror lucrare am înțeles-o însumi.

Tabel cu caractere speciale

Caracter special Descriere
\ Simbol de evacuare. Exemplu: „/seo\/smo/”- se potrivește cu linia care conține seo/smo.
^ Începutul simbolului de date. Exemplu: ‘/^seo/’— se potrivește cu o linie care începe cu cuvântul seo.
$ Simbolul de sfârșit al datelor. Exemplu: „/blog$/”— se potrivește cu o linie care se termină cu cuvântul blog.
. Orice caracter altul decât avansul de linie. Exemplu: „/seo.ult/”- se potrivește cu șirul seopult, seo9ult, seo@ult etc.
În interiorul acestor paranteze sunt listate caractere, oricare dintre ele poate apărea într-un anumit loc, dar numai unul. Exemplu: „/seoult/”— numai liniile care conțin seopult, seokult sau seomult vor fi potrivite.
| Sau. Exemplu de mai jos.
() Submască.
? Una sau zero apariții ale caracterului sau submodelului precedent.
* Orice număr de apariții ale caracterului sau submodelului precedent. Inclusiv zero.
+ Una sau mai multe apariții.
Exemplu: ‘/se+(op|om)?.*t/’- litera s, apoi una sau mai multe litere e, după care combinația op sau om poate apărea o dată, sau poate nu o dată, apoi orice număr de orice simbol și litera t.
(a,b) Numărul de apariții ale caracterului sau submodelului precedent de la a la b. Exemplu: (0,) - la fel ca *, (0,1) - la fel ca ?, (3,5) - 3, 4 sau 5 repetări.

Exemple simple de scripturi PHP folosind expresii regulate:

1) Expresii anterioare și ulterioare.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // găsi un cuvânt în care ing vine după Box. Dacă cuvântul este găsit, funcția va returna true, dacă nu, false.$pattern1 = "/Box(?=ing)/" ; preg_match($pattern1, "Ziua casetei"); // false preg_match ($pattern1, "Boxing Day" ); // Adevărat // găsi un cuvânt care nu are ing după casetă. Dacă cuvântul este găsit, funcția va returna true, dacă nu, false.$pattern2 = "/box(?!ing)/" ; preg_match($pattern2, „Cutie pentru iPhone și iPad”); // adevărat preg_match ($pattern2, "Ce este ziua de box?") ; // false preg_match ($pattern2, "css-moz-box-shadow" ); // Adevărat // găsiți un cuvânt în care ing nu este precedat de casetă. Dacă cuvântul este găsit, funcția va returna true, dacă nu, false.$pattern3 = "/(?

[^<]+?~","blog seo",$text); echo $text; ?>

3) Obțineți și afișați valoarea Alexa Rank a unui site dat.

1 2 3 4 5 6 7 8 9 "#
(.*?)
#si", file_get_contents ( „http://www.alexa.com/siteinfo/($url)”) , $a ); return trim (str_replace ("," , "" , strip_tags ($a [ 1 ] ) ) ); ) $alexa = alexa($url) ; echo $alexa ; ?>

(.*?)

#si", file_get_contents("http://www.alexa.com/siteinfo/($url)"), $a); return trim(str_replace(",","",strip_tags($a))); ) $alexa = alexa($url); echo $alexa; ?>

4) Obțineți și afișați titlul paginii.

1 2 3 4 5 (.*)<\/title>/s" , $str , $m ) ; echo $m [ 1 ] ; ?>

(.*)<\/title>/s", $str, $m); echo $m; ?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 \n \r \t ]/", "" , $conținut ); // înlocuiește caracterele newline și tab cu spații$conținut = preg_replace ("/(2,)/" , " " , $conținut ) ; // înlocuiți mai mult de 2 spații cu unul preg_match_all("/ ]*href=(?:"| \" )(.*)(?:"|\" )[^<>]*>(.*)<\/a>/iU", $conținut , $linkuri ) ; // colectează linkuri dacă (sizeof ($links [ 1 ] ) > 0 ) // dacă sunt găsite linkuri( $out = matrice () ; // matrice de link-uri externe foreach ($linkuri [ 1 ] ca $v ) ( dacă (preg_match ("/http:\/\/(www\.)(0,1)" . $domain . "/i" , $v ) ) // elimina link-urile interne( continua ; ) if ( preg_match ( „/(http:|https:)?\/\/(www\.)(0,1)(.*)/i”, $v ) ) // referință externă( $out = $v ; ) ) return $out ; ) matrice de returnare (); ) $domain = "site" ; $content = file_get_contents ("http://site/"); $getoutlinks = getoutlinks($conținut, $domeniu) ; pentru ($i = 0; $i<= count ($getoutlinks ) ; $i ++ ) { echo $getoutlinks [ $i ] . "
" ; } ?>

]*href=(?:"|\")(.*)(?:"|\")[^<>]*>(.*)<\/a>/iU", $conținut, $linkuri); // colectează link-uri dacă (sizeof($links) > 0) // dacă sunt găsite link-uri ( $out = array(); // matrice de link-uri externe pentru fiecare ($linkuri ca $v ) ( if (preg_match ("/http:\/\/(www\.)(0,1)".$domain."/i", $v)) // elimina link-urile interne ( continua; ) if (preg_match ("/(http:|https:)?\/\/(www\.)(0,1)(..com/"); $getoutlinks = getoutlinks($conținut, $domeniu); pentru ( $i = 0;$i<= count($getoutlinks); $i++) { echo $getoutlinks[$i]."
"; } ?>

Unde:
preg_replace— Efectuează căutarea și înlocuirea folosind o expresie regulată.
preg_match— efectuează o verificare față de o expresie regulată.
preg_match_all— găsește toate potrivirile, în timp ce preg_match îl găsește doar pe primul.
file_get_contents— obțineți conținutul fișierului ca o singură linie.
tunde— elimină spațiile la începutul și la sfârșitul unei linii.
str_replace— înlocuiește șirul de căutare cu un șir de înlocuire.
strip_tags— elimină etichetele html și php dintr-un șir.
dimensiunea— obține numărul de elemente din variabilă.
numara— numără numărul de elemente ale matricei sau numărul de proprietăți ale obiectului.