Treci la conținutul principal

Ce este o expresie regulată?

O expresie regulată descrie ce cauți într-un text. Scrii un șablon format din caractere, iar căutarea folosește acel șablon pentru a găsi potriviri.

Șabloanele pot fi mici, de un singur caracter, sau mult mai elaborate.

Odată ce ai un șablon, îl poți folosi pentru orice fel de căutare sau înlocuire în text.


Sintaxă

În PHP, o expresie regulată se scrie ca un șir de caractere cu cel mult trei părți: delimitatori, șablonul propriu-zis și, dacă ai nevoie de ei, modificatori.

Sintaxa expresiilor regulate

Aici barele oblice sunt delimitatorii, PromptCookbook este șablonul, iar i este un modificator:

index.php
$exp = "/PromptCookbook/i";

Funcții pentru expresii regulate

Mai multe funcții PHP lucrează cu expresii regulate. Aceste trei funcții sunt cele pe care le vei folosi cel mai des:

  • preg_match() - Dă 1 dacă șirul de caractere conține șablonul, altfel 0
  • preg_match_all() - Numără de câte ori apare șablonul în șirul de caractere; rezultatul poate fi 0
  • preg_replace() - Întoarce un șir de caractere nou, în care părțile potrivite sunt înlocuite cu un alt șir de caractere

Folosirea preg_match()

Ca să afli dacă un șir de caractere conține o potrivire pentru un șablon, apelează preg_match().

Exemplu preg_match()

Caută „PromptCookbook” într-un șir de caractere, ignorând diferența dintre majuscule și minuscule. Rezultatul este 1, deoarece există o potrivire:

Prompt
Scrie un script PHP care folosește preg_match() pentru a căuta, fără a ține cont de majuscule și minuscule, „PromptCookbook” în șirul de caractere „Visit PromptCookbook” și afișează dacă a fost găsită o potrivire.
Ieșire: script PHP

Folosirea preg_match_all()

Când ai nevoie de numărul de potriviri ale unui șablon într-un șir de caractere, folosește preg_match_all().

Exemplu preg_match_all()

Numără de câte ori apare „ain” într-un șir de caractere, ignorând diferența dintre majuscule și minuscule:

Prompt
Scrie un script PHP care folosește preg_match_all() pentru a număra, fără a ține cont de majuscule și minuscule, de câte ori apare „ain” în șirul de caractere „The rain in Spain falls mainly on the plain” și afișează numărul.
Ieșire: script PHP

Folosirea preg_replace()

Cu preg_replace(), fiecare potrivire a șablonului dintr-un șir de caractere este înlocuită cu un alt șir de caractere.

Exemplu preg_replace()

Înlocuiește Microsoft cu PromptCookbook într-un șir de caractere, folosind un șablon care ignoră diferența dintre majuscule și minuscule:

Prompt
Scrie un script PHP care folosește preg_replace() pentru a înlocui, fără a ține cont de majuscule și minuscule, „Microsoft” cu „PromptCookbook” în șirul de caractere „Visit Microsoft!” și afișează rezultatul.
Ieșire: script PHP

Modificatori pentru expresii regulate

Adăugarea unui modificator schimbă felul în care se comportă o căutare.

  • i - Ignoră diferența dintre majuscule și minuscule
  • m - Activează modul pe mai multe linii, astfel încât șabloanele pentru începutul sau sfârșitul unui șir de caractere se potrivesc la începutul sau sfârșitul fiecărei linii
  • u - Face ca șabloanele codificate în UTF-8 să se potrivească corect

Șabloane pentru expresii regulate

Parantezele drepte îți permit să potrivești un caracter dintr-un set sau dintr-un interval:

  • [abc] - Un caracter, ales dintre cele enumerate în paranteze
  • [^abc] - Un caracter care nu este enumerat în paranteze
  • [a-z] - O literă mică
  • [A-z] - O literă, mare sau mică; acest interval cuprinde și caracterele speciale aflate între Z și a
  • [A-Z] - O literă mare
  • [123] - O cifră, aleasă dintre cele enumerate în paranteze
  • [0-5] - O cifră de la 0 până la 5
  • [0-9] - O cifră de la 0 până la 9

Metacaractere

Unele caractere nu sunt luate în sens literal într-un șablon. Fiecare dintre aceste metacaractere are propriul rol:

  • | - Separă alternativele, iar oricare dintre ele se poate potrivi, ca în cat|dog|fish
  • . - Exact un caracter de orice fel
  • ^ - Leagă potrivirea de începutul șirului de caractere, ca în ^Hello
  • $ - Leagă potrivirea de sfârșitul șirului de caractere, ca în World$
  • \d - O cifră
  • \s - Un caracter de spațiere
  • \b - O margine de cuvânt: \bWORD se potrivește la începutul unui cuvânt, iar WORD\b se potrivește la sfârșitul unuia
  • \x{xxxx} - Caracterul Unicode al cărui număr hexazecimal este xxxx (necesită modificatorul u)

Cuantificatori

Un cuantificator spune de câte ori poate apărea ceva:

  • n+ - Un șir de caractere cu unul sau mai multe n
  • n* - Un șir de caractere în care n apare de oricâte ori, inclusiv niciodată
  • n? - Un șir de caractere în care n apare o dată sau deloc
  • n{x} - Un șir de caractere cu o succesiune de exact X caractere n
  • n{x,y} - Un șir de caractere cu o succesiune de la X la Y caractere n
  • n{x,} - Un șir de caractere cu o succesiune de X sau mai multe caractere n

Grupare

Pune o parte dintr-un șablon între paranteze () și un cuantificator se va aplica întregii părți. Parantezele îți permit și să alegi părți din șablon pe care să le folosești ca potrivire.

Exemplu de grupare

Găsește cuvântul „banana” căutând ba urmat de două copii ale lui na:

Prompt
Scrie un script PHP care folosește preg_match() cu grupare pentru a căuta „banana” căutând „ba” urmat de două apariții ale „na” în șirul de caractere „I like bananas” și afișează dacă a fost găsită o potrivire.
Ieșire: script PHP