Sintaxa expresiilor regulate
Descrierea de mai jos a expresiilor regulate se bazează parțial pe documentația bibliotecii REGEXP, creată de Henry Spencer. Sally folosește această bibliotecă pentru potrivirea expresiilor regulate.
Sintaxa de bază a expresiilor regulate
- «^» — la începutul expresiei, corespunde începutului unei linii (de exemplu, «^test» corespunde tuturor șirurilor «test» aflate la început de linie)
- «$» — la sfârșitul expresiei, corespunde sfârșitului unei linii
- «.» — corespunde oricărui caracter unic (de exemplu, «do.» corespunde șirurilor «dog», «dot», «doe» etc.; «d..r» corespunde șirurilor «door», «deer» etc.)
- «*» — după o expresie, corespunde unui număr de 0 sau mai multe apariții ale acesteia (de exemplu, «ad*» corespunde șirurilor «a», «ad» și «add» — adică «a» urmat de oricâte litere «d»)
- «+» — după o expresie, corespunde unui număr de 1 sau mai multe apariții ale acesteia (de exemplu, «do+» corespunde șirurilor «do» și «doo» — adică «d» urmat de cel puțin un «o»)
- «?» — după o expresie, corespunde unui număr de 0 sau 1 apariții ale acesteia (de exemplu, «add?» corespunde șirurilor «ad» și «add» — adică «ad» urmat opțional de «d»)
- «|» — între expresii, corespunde primei expresii, celei de-a doua etc. (de exemplu, «red|blue|black» corespunde șirurilor «red», «blue» și «black» — adică oricăruia dintre cuvintele menționate)
- «[ ]» — caracterele dintre parantezele drepte corespund oricărui caracter inclus între ele, dar niciunuia din afară (de exemplu, «a[dts]» corespunde șirurilor «ad», «at» și «as» — adică «a» urmat de «d», «t» sau «s»)
- «[^ ]» — caracterele dintre parantezele drepte corespund oricărui caracter care nu apare între ele, dar niciunuia dintre cele incluse (de exemplu, «[^abc]» corespunde oricărui caracter cu excepția «a», «b» și «c»)
- «[-]» — indică un interval de caractere (de exemplu, «1[0-9]» corespunde tuturor numerelor de la «10» la «19»)
- «( )» — reunește expresiile dintre paranteze într-o singură expresie (de exemplu, «(very )*well» corespunde șirurilor «well», «very well» și «very very well» — adică oricâte apariții ale «very » urmate de «well»)
- «\» — înaintea oricărui caracter, corespunde acelui caracter (de exemplu, «too\.» corespunde numai șirului «too.»; observați că «too.» corespunde șirurilor «tool», «took» și «toon» — adică «too» urmat de orice caracter)
Sintaxa expresiilor regulate
O expresie regulată constă din zero sau mai multe ramuri, separate prin «|». Corespunde oricărui șir care corespunde uneia dintre ramuri.
O ramură constă din zero sau mai multe fragmente concatenate. Corespunde primului fragment urmat de al doilea și așa mai departe.
Un fragment este un atom urmat eventual de «*», «+» sau «?». 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. Un atom urmat de «?» corespunde unei potriviri a atomului sau șirului vid.
Un atom este o expresie regulată între paranteze (care corespunde oricărui șir potrivit de expresie), un interval (vedeți mai jos), «.» (orice caracter unic), «^» (șirul vid la începutul liniei), «$» (șirul vid la sfârșitul liniei), «\» urmat de un singur caracter (acel caracter) sau un singur caracter fără altă semnificație (acel caracter).
Un interval este o secvență de caractere încadrată de «[]». În mod normal, corespunde oricărui caracter unic din secvență. Dacă secvența începe cu «^», corespunde oricărui caracter unic care nu apare în restul secvenței. Două caractere separate prin «-» reprezintă prescurtat lista completă a caracterelor ASCII dintre ele (de exemplu, «[0-9]» corespunde oricărei cifre zecimale). Pentru a include literal «]» în secvență, puneți-l primul (după un eventual «^»). Pentru a include literal «-», puneți-l primul sau ultimul.
Ambiguitate
Dacă o expresie regulată poate găsi potriviri în două părți diferite ale textului, o va alege pe cea care începe mai devreme. Dacă ambele încep în același loc, dar au lungimi diferite, sau aceeași lungime obținută în moduri diferite, lucrurile se complică după cum urmează.
În general, posibilitățile dintr-o listă de ramuri sunt luate în considerare de la stânga la dreapta, cele pentru «*», «+» și «?» începând cu cea mai lungă, construcțiile imbricate dinspre exterior spre interior, iar construcțiile concatenate începând cu cea din extrema stângă. Se alege potrivirea care folosește prima posibilitate.
De exemplu, «(ab|a)b*c» poate corespunde șirului «abc» în două moduri. Prima alegere este între «ab» și «a»; fiind primul și ducând la o potrivire completă, este ales «ab». Deoarece «b» a fost deja consumat, «b*» trebuie să aleagă ultima sa posibilitate — șirul vid — pentru a respecta alegerea anterioară.
În cazul particular fără «|» și cu un singur «*», «+» sau «?», se alege cea mai lungă potrivire posibilă. Astfel, «ab*» aplicat șirului «xabbbby» corespunde lui «abbbb». Observați că, aplicat șirului «xabyabbbz», «ab*» corespunde lui «ab» imediat după «x», potrivit regulii care alege potrivirea ce începe cel mai devreme.
From the Sally manual (GPL-2.0-or-later), © 1997-2023 Open Salamander Authors; © 2025-2026 Elias Bachaalany. Source: manual source (zip) · original page in the Sally repository