Provided by: manpages-ro_4.28.0-2_all 

NUME
regex - expresii regulate POSIX.2
DESCRIERE
Expresiile regulate („ER”), astfel cum sunt definite în POSIX.2, se prezintă sub două forme: ER moderne
(aproximativ cele din egrep(1); POSIX.2 le numește ER „extinse”) și ER depășite (aproximativ cele din
ed(1); POSIX.2 ER „de bază”). ER învechite există mai ales pentru compatibilitatea retroactivă în unele
programe vechi; acestea vor fi discutate la sfârșit. POSIX.2 lasă deschise unele aspecte ale sintaxei și
semanticii ER; „(!)” marchează deciziile privind aceste aspecte care pot să nu fie complet portabile în
alte implementări POSIX.2.
O ER (modernă) este una(!) sau mai multe(!) ramuri nevide, separate prin „|”. Se potrivește cu orice
lucru care se potrivește cu una dintre ramuri.
O ramură este una(!) sau mai multe piese, concatenate. Ea corespunde unei potriviri pentru prima, urmată
de o potrivire pentru a doua și așa mai departe.
O piesă este un atom eventual urmat de un singur(!) „*”, „+”, „?”, sau delimitattor. Un atom urmat de „*”
corespunde unei secvențe de 0 sau mai multe potriviri ale atomului. Un atom urmat de „+” corespunde unei
secvențe de 1 sau mai multe potriviri ale atomului. Un atom urmat de „?” corespunde unei secvențe de 0
sau 1 potriviri ale atomului.
Un delimitator este „{” urmată de un număr întreg zecimal fără semn, eventual urmată de „,” eventual
urmată de un alt număr întreg zecimal fără semn, întotdeauna urmată de „}”. Numerele întregi trebuie să
fie între 0 și RE_DUP_MAX (255(!)) inclusiv, iar dacă sunt două, primul nu poate depăși pe al doilea. Un
atom urmat de un delimitator care conține un întreg i și nicio virgulă se potrivește cu o secvență de
exact i potriviri ale atomului. Un atom urmat de un delimitator care conține un întreg i și o virgulă se
potrivește cu o secvență de i sau mai multe potriviri ale atomului. Un atom urmat de un delimitator care
conține două numere întregi i și j se potrivește cu o secvență de potriviri i până la j (inclusiv) ale
atomului.
Un atom este o expresie regulată inclusă între „()” (care corespunde unei potriviri pentru expresia
regulată), un set gol de „()” (care corespunde șirului nul)(!), o expresie între paranteze drepte (a se
vedea mai jos), „.” (se potrivește cu orice caracter unic), „^” (se potrivește cu șirul nul de la
începutul unei linii), „$” (se potrivește cu șirul nul de la sfârșitul unei linii), o bară oblică inversă
„\” urmată de unul dintre caracterele „^. [$()|*+?{\” (se potrivește cu acest caracter luat ca un
caracter obișnuit), o bară oblică inversă „\” urmată de orice alt caracter(!) (se potrivește cu acest
caracter luat ca un caracter obișnuit, ca și cum „\” nu ar fi fost prezentă(!)), sau un singur caracter
fără altă semnificație (se potrivește cu acest caracter). O acoladă „{” urmată de un alt caracter decât o
cifră este un caracter obișnuit, nu începutul unui delimitator(!). Este ilegal să se încheie o ER cu „\”.
O expresie între paranteze drepte este o listă de caractere incluse între „[]”. În mod normal, se
potrivește cu orice singur caracter din listă (a se vedea mai jos). Dacă lista începe cu un accent
circumflex „^”, se potrivește cu orice caracter unic (a se vedea mai jos), dar nu din restul listei. Dacă
două caractere din listă sunt separate prin „-”, aceasta este o abreviere pentru întregul interval de
caractere dintre cele două (inclusiv) din secvența de colaționare, de exemplu, „[0-9]” în ASCII
corespunde oricărei cifre zecimale. Este ilegal(!) ca două intervale să împartă un punct final, de
exemplu, „a-c-e”. Intervalele depind foarte mult de secvența de colaționare, iar programele portabile ar
trebui să evite să se bazeze pe ele.
To include a literal '
În cadrul unei expresii între paranteze drepte, un element de colaționare (un caracter, o secvență de mai
multe caractere care se colaționează ca și cum ar fi un singur caracter sau un nume de secvență de
colaționare pentru oricare dintre acestea) inclus între „[.” și „.]” reprezintă secvența de caractere a
acelui element de colaționare. Secvența este un singur element al listei expresiei între paranteze
drepte. O expresie între paranteze drepte care conține un element de colaționare cu mai multe caractere
poate corespunde astfel mai multor caractere, de exemplu, dacă secvența de colaționare include un element
de colaționare „ch”, atunci ER „[[.ch.]]*c” corespunde primelor cinci caractere din „chchcc”.
În cadrul unei expresii între paranteze drepte, un element de colaționare încadrat între „[=” și „=]”
este o clasă de echivalență, reprezentând secvențele de caractere ale tuturor elementelor de colaționare
echivalente cu acesta, inclusiv el însuși; (în cazul în care nu există alte elemente echivalente,
tratamentul este ca și cum delimitatorii care le înconjoară ar fi „[.” și „.]”). De exemplu, dacă „o” și
„ô)” sunt membrii unei clase de echivalență, atunci „[[=o=]]”, „[[=ô=]]” și „[oô]” sunt toate sinonime. O
clasă de echivalență nu poate(!) fi un capăt al unui interval.
În cadrul unei expresii între paranteze drepte, numele unei clase de caractere încadrat în „[:” și „:]”
reprezintă lista tuturor caracterelor care aparțin clasei respective. Numele standard ale claselor de
caractere sunt:
alnum digit punct
alpha graph space
blank lower upper
cntrl print xdigit
Acestea reprezintă clasele de caractere definite în wctype(3). O configurație regională poate furniza
altele. O clasă de caractere nu poate fi utilizată ca punct final al unui interval.
În cazul în care o ER ar putea corespunde mai multor subșiruri dintr-un șir dat, ER corespunde celui care
începe cel mai întâi în șir. În cazul în care ER se poate potrivi cu mai mult de un subșir care începe în
acel punct, se potrivește cu cel mai lung. Subexpresiile se potrivesc, de asemenea, cu cele mai lungi
subșiruri posibile, sub rezerva constrângerii ca întreaga potrivire să fie cât mai lungă posibil,
subexpresiile care încep mai înainte în ER având prioritate față de cele care încep mai târziu. Rețineți
că subexpresiile de nivel superior au astfel prioritate față de subexpresiile lor componente de nivel
inferior.
Lungimile de potrivire se măsoară în caractere, nu în elemente de colaționare. Un șir nul este considerat
mai lung decât nici o potrivire. De exemplu, „bb*” se potrivește cu cele trei caractere din mijloc din
„abbbc”, „(wee|week)(knights|nights)” se potrivește cu toate cele zece caractere din „weeknights”, atunci
când „(.*).*” se potrivește cu „abc”, subexpresia în paranteză se potrivește cu toate cele trei
caractere, iar atunci când „(a*)*” se potrivește cu „bc”, atât ER întreagă cât și subexpresia în
paranteză se potrivesc cu șirul nul.
Dacă este specificată potrivirea independentă de diferența dintre minuscule și majuscule, efectul este ca
și cum toate diferențele dintre minuscule și majuscule ar fi dispărut din alfabet. Atunci când un
caracter alfabetic există atât în minusculă cât și în majusculă apare ca un caracter obișnuit în afara
unei expresii între paranteze, acesta este transformat efectiv într-o expresie între paranteze drepte
care conține ambele cazuri, de exemplu, „x” devine „[xX]”. Atunci când apare în interiorul unei expresii
între paranteze drepte, toate variantele sale (minusculă, majusculă) sunt adăugate la expresia între
paranteze drepte, astfel încât, de exemplu, „[x]” devine „[xX]” și „[^x]” devine „[^xX]”.
Nu se impune nicio limită specială privind lungimea ER(!). Programele destinate să fie portabile nu ar
trebui să utilizeze ER mai lungi de 256 de octeți, deoarece o implementare poate refuza să accepte astfel
de ER și să rămână conformă cu POSIX.
Expresiile regulate învechite („de bază”) diferă în mai multe privințe. „|”, „+” și „?” sunt caractere
obișnuite și nu există echivalent pentru funcționalitatea lor. Delimitatorii pentru limite sunt „\{” și
„\}”, „{” și „}” fiind caractere obișnuite. Parantezele pentru subexpresiile imbricate sunt „\(” și „\)”,
cu „(” și „)” fiind ele însele caractere obișnuite. „^” este un caracter obișnuit, cu excepția
începutului ER sau(!) începutul unei subexpresii în paranteză, „$” este un caracter obișnuit, cu excepția
sfârșitului ER sau(!) sfârșitul unei subexpresii în paranteză, iar „*” este un caracter obișnuit dacă
apare la începutul ER sau la începutul unei subexpresii în paranteză (după un posibil „^” inițial).
În sfârșit, există un nou tip de atom, o referință înapoi: „\” urmat de o cifră zecimală diferită de zero
d corespunde aceleiași secvențe de caractere corespunzătoare celei de-a d-a subexpresii puse între
paranteze (numerotarea subexpresiilor se face după pozițiile parantezelor de deschidere, de la stânga la
dreapta), astfel încât, de exemplu, „\([bc]\)\1” se potrivește cu „bb” sau „cc” dar nu cu „bc”.
ERORI
A avea două tipuri de ExpresiiRegulate este o greșeală.
Actuala specificație POSIX.2 spune că „)” este un caracter obișnuit în absența unui caracter „(” pereche;
acesta a fost rezultatul neintenționat al unei erori de redactare, iar schimbarea este probabilă. Evitați
să vă bazați pe aceasta.
Referințele înapoi sunt o greșeală îngrozitoare, punând probleme majore implementărilor eficiente. Ele
sunt, de asemenea, definite oarecum vag („a\(\(b\)*\2\)*d” corespunde cu „abbbd”?). Evitați să le
utilizați.
Specificația POSIX.2 privind potrivirea independentă de tipul caracterelor (majusculă/minusculă) este
vagă. Definiția „prezența majusculei sau minusculei, implică prezența celeilalte” dată mai sus reprezintă
consensul actual între cei ce implementează utilizarea expresiilor regulate cu privire la interpretarea
corectă.
AUTOR
Această pagină a fost preluată din pachetul regex al lui Henry Spencer.
CONSULTAȚI ȘI
grep(1), regex(3)
POSIX.2, secțiunea 2.8 (Regular Expression Notation).
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o
versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO
RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
ro@lists.sourceforge.net.
Pagini de manual de Linux 6.9.1 15 iunie 2024 regex(7)