User Tools

Site Tools


ro:regularexpressions

This is an old revision of the document!


Expresii regulate

O expresie regulată este un șir de caractere care conține niște reguli speciale, comportându-se ca un șablon pentru căutarea/potrivirea unor porțiuni dintr-un text.

Abrevieri de caractere

ElementPotrivire
cun caracter, atâta timp cât acesta nu are o altă semnificație în expresiile regulate
\ccaută o potrivire cu caracterul care urmează semnului '\'. Util pentru a căuta caractere care singure au un rol special (ex. '.', '?'…)
\acaracterul chr(7)
\fcaracterul chr(12)
\ncaracterul de linie nouă chr(10)
\rcaracterul chr(13)
\tcaracterul tabulator chr(9)
\vcaracterul chr(11)
\xhhhhun caracter Unicode cu codul exprimat în sistemul hexazecimal cu numărul hhhh (între 0x0000 și 0xFFFF)
\0oooun caracter ASCII/Latin1 având codul exprimat în sistemul octal ooo (între 0 și 0377)
. (punct)orice caracter, inclusiv caracterul linie nouă
\do cifră
\Dun caracter care nu este o cifră
\sun caracter de spațiere
\Sun caracter care nu este unul de spațiere
\wo cifră, o literă sau caracterul '_'
\Wun caracter care nu este o cifră, o literă sau caracterul '_'
\1 \2 … \9referință din urmă (același text capturat de ultimul grup de capturare)

Seturi de caractere

Parantezele pătrate înseamnă potrivirea oricărui caracter dintre parantezele pătrate. Cu excepția abrevierilor de caractere descrise mai sus și a următoarelor două excepții, alte caractere nu au înțelesuri speciale între paranteze pătrate:

  • caracterul minus/cratimă '-' definește un interval
  • caracterul '^' poziționat imediat după deschiderea parantezei drepte înseamnă negarea conținutului dintre paranteze.
Exemplu de expresie regulatăDescriere
[xyz]se potrivește cu oricare din caracterele 'x', 'y' sau 'z'
[^xyz]se potrivește cu orice caracter, cu excepția caracterelor 'x', 'y' și 'z'
[a-g]se potrivește cu orice caracter din intervalul dintre 'a' și 'g'
[0-9a-zA-Z_]se potrivește cu orice cifră între '0' și '9', orice caracter între 'a' și 'z' și între 'A' și 'Z', sau se potrivește cu caracterul '_'

Folosirea abrevierilor de caractere predefinite este mai portabilă decât utilizarea intervalelor de caractere între platforme și limbi. De exemplu, [0-9] se potrivește cu o cifră în alfabete occidentale, dar \d se potrivește cu o cifră din orice alfabet.

Cuantificatori

În mod implicit, o expresie este așteptată să apară o singură dată. Acest lucru poate fi schimbat cu ajutorul cuantificatorilor:

ExpresieDescriereExpresie regulatăPotriviriEchivalent cu
?una sau nicio apariție“maci?”“mac”, “maci”{0,1}
+una sau mai multe apariții“0+““0”, “00”, “000” etc.{1,}
*zero sau mai multe apariții“0*123”“123”, “0123”, “00123”, “000123” etc.{0,}
{n}un număr de n apariții“x{5}““xxxxx”{n,n}
{n,}cel puțin n apariții
{,m}cel mult m apariții {0,m}
{n,m}cel puțin n apariții și cel mult m apariții

Cuantificatorii sunt în mod normal “lacomi”. Ei încearcă să potrivească întotdeauna cât mai mult text posibil. Comportamentul poate fi schimbat cu ajutorul instrucțiunii RegExMinimal.

Grupuri de capturare

Parantezele rotunde permit să se grupeze elemente împreună pentru a le putea cuantifica și captura.
De exemplu, dacă se folosește expresia regulară “roșu|alb|galben”, atunci va fi capturată doar prima valoare întâlnită dintre cele trei. Dacă se folosesc parantezele rotunde, acestea permit gruparea elementelor. De exemplu expresia “steag (roșu|alb|galben)” va captura una dintre valorile: “steag roșu”, “steag alb” sau “steag galben”. Dacă nu s-ar fi folosit parantezele pentru grupare și s-ar fi folosit expresia regulară “steag roșu|alb|galben” atunci s-ar fi căutat doar valorile “steag roșu”, “alb” sau “galben”.

Grupurile de captură permit și cuantificarea conținutului lor. De exemplu expresia “(bla)+” va captura oricâte serii consecutive de “bla”, dar nu mai puțin de una (vezi cuantificatorul +). Texte care se potrivesc acestei expresii pot fi: “bla”, “blabla”, “blablablablabla” etc.

Grupurile de captură permit utilizarea referințelor. O expresie regulată poate face referire la un grup de captură din cadrul expresiei folosind o referință. Se pot folosi până la 9 referințe, unde \1 este primul grup de captură din expresie, \2 este al doilea, \3 este al treilea ș.a.m.d.
De exemplu, expresia \b(\w+)\W+\1\b poate fi folosită în găsirea cuvintelor repetate unul după altul. \b reprezintă existența unei limite de cuvânt (din engleză boundary = limită), adică tocmai începe sau se termină un cuvânt format din caractere alfanumerice. Apoi urmează un grup de captură (\w+) care va potrivi cât mai multe caractere alfanumerice consecutive (cel puțin un caracter), apoi urmează unul sau mai multe caractere care nu sunt alfanumerice \W+, urmate imediat de o referință \1. Aceasta face referire la textul rezultat din aplicarea primului grup de capturare din expresie ((\w+)). Această expresie va potrivi cuvintele dublate dintr-un text, cum ar fi: “nu știu dar dar am să învăț”, sau “morcov și și țelină”.

Dacă se dorește doar gruparea, fără capturare în vederea realizării unei referințe ulterioare, de exemplu, atunci se poate folosi o sintaxă precum: (?:roșu|alb).

Grupurile, de orice fel, pot fi imbricate (să fie incluse unele în altele).

Aserțiuni

Aserțiunile fac o declarație despre text în punctul în care acestea apar în expresie, dar nu se potrivesc cu niciun caracter.

ExpresieDescriere
^semnifică începutul șirului de caractere în care se caută. De exemplu expresia “^Așadar” se va potrivi doar în cazul în care cuvântul “Așadar se află la începutul textului de căutat. Dacă se dorește căutarea simbolului '^' atunci se poate folosi “\^
$semnifică sfârșitul șirului de caractere în care se caută. De exemplu expresia “\s+$” va potrivi doar caracterele de spațiere aflate la sfârșitul textului.
\bsemnifică o limită a unui cuvânt. Adică fie începe un cuvânt, fie se termină. Expresia “\bcine\b” se va potrivi doar cu cuvântul “cine”, pe când “\bcine” se va potrivi cu orice cuvânt care începe cu “cine” precum “cinema” sau “cineva”. În mod asemănător, expresia “cine\b” se va potrivi cu sfârșitul unor cuvinte precum “oricine” sau “mărăcine”
\Bsemnifică faptul că acolo nu este vorba de o limită a unui cuvânt. De exemplu expresia “\Bcine\B” se va potrivi doar în cazul în care “cine” se află în mijlocul unui cuvânt. \B este inversul expresiei \b.
(?=…)potrivește doar dacă expresia există, fără să o captureze. De exemplu expresia număr(?=\s+întreg\b) se va potrivi cu “număr” doar dacă este urmat de cuvântul “întreg”.
(?!…)potrivește doar dacă expresia nu există, fără să o captureze. De exemplu expresia număr(?!\s+real\b) se va potrivi cu “număr” doar dacă nu este urmat de cuvântul “real”.
ro/regularexpressions.1504703037.txt.gz · Last modified: 2020/02/28 10:46 (external edit)