regex(7) Miscellaneous Information Manual regex(7) NUME regex - expresii regulate POSIX.2 DESCRIERE Expresiile regulate (,,ER"), astfel cum sunt definite in POSIX.2, se prezinta sub doua forme: ER moderne (aproximativ cele din egrep(1); POSIX.2 le numete ER ,,extinse") i ER depaite (aproximativ cele din ed(1); POSIX.2 ER ,,de baza"). ER invechite exista mai ales pentru compatibilitatea retroactiva in unele programe vechi; acestea vor fi discutate la sfarit. POSIX.2 lasa deschise unele aspecte ale sintaxei i semanticii ER; ,,(!)" marcheaza deciziile privind aceste aspecte care pot sa nu fie complet portabile in alte implementari POSIX.2. O ER (moderna) este una(!) sau mai multe(!) ramuri nevide, separate prin ,,|". Se potrivete cu orice lucru care se potrivete cu una dintre ramuri. O ramura este una(!) sau mai multe piese, concatenate. Ea corespunde unei potriviri pentru prima, urmata de o potrivire pentru a doua i aa mai departe. O piesa este un atom eventual urmat de un singur(!) ,,*", ,,+", ,,?", sau delimitattor. Un atom urmat de ,,*" corespunde unei secvene de 0 sau mai multe potriviri ale atomului. Un atom urmat de ,,+" corespunde unei secvene de 1 sau mai multe potriviri ale atomului. Un atom urmat de ,,?" corespunde unei secvene de 0 sau 1 potriviri ale atomului. Un delimitator este ,,{" urmata de un numar intreg zecimal fara semn, eventual urmata de ,,," eventual urmata de un alt numar intreg zecimal fara semn, intotdeauna urmata de ,,}". Numerele intregi trebuie sa fie intre 0 i RE_DUP_MAX (255(!)) inclusiv, iar daca sunt doua, primul nu poate depai pe al doilea. Un atom urmat de un delimitator care conine un intreg i i nicio virgula se potrivete cu o secvena de exact i potriviri ale atomului. Un atom urmat de un delimitator care conine un intreg i i o virgula se potrivete cu o secvena de i sau mai multe potriviri ale atomului. Un atom urmat de un delimitator care conine doua numere intregi i i j se potrivete cu o secvena de potriviri i pana la j (inclusiv) ale atomului. Un atom este o expresie regulata inclusa intre ,,()" (care corespunde unei potriviri pentru expresia regulata), un set gol de ,,()" (care corespunde irului nul)(!), o expresie intre paranteze drepte (a se vedea mai jos), ,,." (se potrivete cu orice caracter unic), ,,^" (se potrivete cu irul nul de la inceputul unei linii), ,,$" (se potrivete cu irul nul de la sfaritul unei linii), o bara oblica inversa ,,\" urmata de unul dintre caracterele ,,^. [$()|*+?{\" (se potrivete cu acest caracter luat ca un caracter obinuit), o bara oblica inversa ,,\" urmata de orice alt caracter(!) (se potrivete cu acest caracter luat ca un caracter obinuit, ca i cum ,,\" nu ar fi fost prezenta(!)), sau un singur caracter fara alta semnificaie (se potrivete cu acest caracter). O acolada ,,{" urmata de un alt caracter decat o cifra este un caracter obinuit, nu inceputul unui delimitator(!). Este ilegal sa se incheie o ER cu ,,\". O expresie intre paranteze drepte este o lista de caractere incluse intre ,,[]". In mod normal, se potrivete cu orice singur caracter din lista (a se vedea mai jos). Daca lista incepe cu un accent circumflex ,,^", se potrivete cu orice caracter unic (a se vedea mai jos), dar nu din restul listei. Daca doua caractere din lista sunt separate prin ,,-", aceasta este o abreviere pentru intregul interval de caractere dintre cele doua (inclusiv) din secvena de colaionare, de exemplu, ,,[0-9]" in ASCII corespunde oricarei cifre zecimale. Este ilegal(!) ca doua intervale sa imparta un punct final, de exemplu, ,,a-c-e". Intervalele depind foarte mult de secvena de colaionare, iar programele portabile ar trebui sa evite sa se bazeze pe ele. To include a literal ' In cadrul unei expresii intre paranteze drepte, un element de colaionare (un caracter, o secvena de mai multe caractere care se colaioneaza ca i cum ar fi un singur caracter sau un nume de secvena de colaionare pentru oricare dintre acestea) inclus intre ,,[." i ,,.]" reprezinta secvena de caractere a acelui element de colaionare. Secvena este un singur element al listei expresiei intre paranteze drepte. O expresie intre paranteze drepte care conine un element de colaionare cu mai multe caractere poate corespunde astfel mai multor caractere, de exemplu, daca secvena de colaionare include un element de colaionare ,,ch", atunci ER ,,[[.ch.]]*c" corespunde primelor cinci caractere din ,,chchcc". In cadrul unei expresii intre paranteze drepte, un element de colaionare incadrat intre ,,[=" i ,,=]" este o clasa de echivalena, reprezentand secvenele de caractere ale tuturor elementelor de colaionare echivalente cu acesta, inclusiv el insui; (in cazul in care nu exista alte elemente echivalente, tratamentul este ca i cum delimitatorii care le inconjoara ar fi ,,[." i ,,.]"). De exemplu, daca ,,o" i ,,o)" sunt membrii unei clase de echivalena, atunci ,,[[=o=]]", ,,[[=o=]]" i ,,[oo]" sunt toate sinonime. O clasa de echivalena nu poate(!) fi un capat al unui interval. In cadrul unei expresii intre paranteze drepte, numele unei clase de caractere incadrat in ,,[:" i ,,:]" reprezinta lista tuturor caracterelor care aparin clasei respective. Numele standard ale claselor de caractere sunt: alnum digit punct alpha graph space blank lower upper cntrl print xdigit Acestea reprezinta clasele de caractere definite in wctype(3). O configuraie regionala poate furniza altele. O clasa de caractere nu poate fi utilizata ca punct final al unui interval. In cazul in care o ER ar putea corespunde mai multor subiruri dintr-un ir dat, ER corespunde celui care incepe cel mai intai in ir. In cazul in care ER se poate potrivi cu mai mult de un subir care incepe in acel punct, se potrivete cu cel mai lung. Subexpresiile se potrivesc, de asemenea, cu cele mai lungi subiruri posibile, sub rezerva constrangerii ca intreaga potrivire sa fie cat mai lunga posibil, subexpresiile care incep mai inainte in ER avand prioritate faa de cele care incep mai tarziu. Reinei ca subexpresiile de nivel superior au astfel prioritate faa de subexpresiile lor componente de nivel inferior. Lungimile de potrivire se masoara in caractere, nu in elemente de colaionare. Un ir nul este considerat mai lung decat nici o potrivire. De exemplu, ,,bb*" se potrivete cu cele trei caractere din mijloc din ,,abbbc", ,,(wee|week)(knights|nights)" se potrivete cu toate cele zece caractere din ,,weeknights", atunci cand ,,(.*).*" se potrivete cu ,,abc", subexpresia in paranteza se potrivete cu toate cele trei caractere, iar atunci cand ,,(a*)*" se potrivete cu ,,bc", atat ER intreaga cat i subexpresia in paranteza se potrivesc cu irul nul. Daca este specificata potrivirea independenta de diferena dintre minuscule i majuscule, efectul este ca i cum toate diferenele dintre minuscule i majuscule ar fi disparut din alfabet. Atunci cand un caracter alfabetic exista atat in minuscula cat i in majuscula apare ca un caracter obinuit in afara unei expresii intre paranteze, acesta este transformat efectiv intr-o expresie intre paranteze drepte care conine ambele cazuri, de exemplu, ,,x" devine ,,[xX]". Atunci cand apare in interiorul unei expresii intre paranteze drepte, toate variantele sale (minuscula, majuscula) sunt adaugate la expresia intre paranteze drepte, astfel incat, de exemplu, ,,[x]" devine ,,[xX]" i ,,[^x]" devine ,,[^xX]". Nu se impune nicio limita speciala privind lungimea ER(!). Programele destinate sa fie portabile nu ar trebui sa utilizeze ER mai lungi de 256 de octei, deoarece o implementare poate refuza sa accepte astfel de ER i sa ramana conforma cu POSIX. Expresiile regulate invechite (,,de baza") difera in mai multe privine. ,,|", ,,+" i ,,?" sunt caractere obinuite i nu exista echivalent pentru funcionalitatea lor. Delimitatorii pentru limite sunt ,,\{" i ,,\}", ,,{" i ,,}" fiind caractere obinuite. Parantezele pentru subexpresiile imbricate sunt ,,\(" i ,,\)", cu ,,(" i ,,)" fiind ele insele caractere obinuite. ,,^" este un caracter obinuit, cu excepia inceputului ER sau(!) inceputul unei subexpresii in paranteza, ,,$" este un caracter obinuit, cu excepia sfaritului ER sau(!) sfaritul unei subexpresii in paranteza, iar ,,*" este un caracter obinuit daca apare la inceputul ER sau la inceputul unei subexpresii in paranteza (dupa un posibil ,,^" iniial). In sfarit, exista un nou tip de atom, o referina inapoi: ,,\" urmat de o cifra zecimala diferita de zero d corespunde aceleiai secvene de caractere corespunzatoare celei de-a d-a subexpresii puse intre paranteze (numerotarea subexpresiilor se face dupa poziiile parantezelor de deschidere, de la stanga la dreapta), astfel incat, de exemplu, ,,\([bc]\)\1" se potrivete cu ,,bb" sau ,,cc" dar nu cu ,,bc". ERORI A avea doua tipuri de ExpresiiRegulate este o greeala. Actuala specificaie POSIX.2 spune ca ,,)" este un caracter obinuit in absena unui caracter ,,(" pereche; acesta a fost rezultatul neintenionat al unei erori de redactare, iar schimbarea este probabila. Evitai sa va bazai pe aceasta. Referinele inapoi sunt o greeala ingrozitoare, punand probleme majore implementarilor eficiente. Ele sunt, de asemenea, definite oarecum vag (,,a\(\(b\)*\2\)*d" corespunde cu ,,abbbd"?). Evitai sa le utilizai. Specificaia POSIX.2 privind potrivirea independenta de tipul caracterelor (majuscula/minuscula) este vaga. Definiia ,,prezena majusculei sau minusculei, implica prezena celeilalte" data mai sus reprezinta consensul actual intre cei ce implementeaza utilizarea expresiilor regulate cu privire la interpretarea corecta. AUTOR Aceasta pagina a fost preluata din pachetul regex al lui Henry Spencer. CONSULTAI I grep(1), regex(3) POSIX.2, seciunea 2.8 (Regular Expression Notation). TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 15 iunie 2024 regex(7)