User Tools

Site Tools


ro:regularexpressions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
ro:regularexpressions [2017/09/05 14:09]
junior-root created
ro:regularexpressions [2020/02/28 10:46] (current)
Line 1: Line 1:
-==== Regular Expressions ==== +==== Expresii regulate ==== 
-Regular Expressions are just normal strings but have a specific format used in searching and replacing text. +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.
-O expresie regulată, sau "regex", este un model pentru potrivirea substringurilor într-un text. Acest lucru este util în multe contexte, de exemplu,+
  
-^Element^Potrivire^Text de căutat și potriviri^Expresie regulată^ +==== Abrevieri de caractere ====
-|**c**|un caracter, atâta timp cât acesta nu are o altă semnificație în expresiile regulate|"un ș**ori**cel"|"ori"+
-|**\c**|caută o potrivire cu caracterul care urmează semnului '\'. Util pentru a căuta caractere care singure au un rol special (ex. '.', '?'...)|"Semne:!@#**?**#%**?**"|"\?"+
-|**\a**|caracterul chr(7)| | | +
-|**\f**|caracterul chr(12)| | | +
-|**\n**|caracterul de linie nouă chr(10)| | | +
-|**\r**|caracterul chr(13)| | | +
-|**\t**|caracterul tabulator chr(9)| | | +
-|**\v**|caracterul chr(11)| | | +
-|**\xhhhh**|un caracter Unicode cu codul exprimat în sistemul hexazecimal cu numărul hhhh (între 0x0000 și 0xFFFF)| | | +
-|**\0ooo**|un caracter ASCII/Latin1 având codul exprimat în sistemul octal ooo (între 0 și 0377)| | | +
-|**.** (punct)|orice caracter, inclusiv caracterul linie nouă|"să**niu**ș"|"n.u"+
-|**\d**|o cifră|""|""+
-|**\D**|un caracter care nu este o cifră|""|""+
-|**\s**|un caracter de spațiere|""|""+
-|**\S**|un caracter care nu este unul de spațiere|""|""+
-|**\w**|o cifră, o literă sau caracterul '_'|""|""+
-|**\W**|un caracter care nu este o cifră, o literă sau caracterul '_'|""|""+
-|**\n**|referință din urmă (același text capturat de ultimul grup de capturare)|""|""|+
  
 +^Expresie^Descriere^
 +|**c**|un caracter, atâta timp cât acesta nu are o altă semnificație în expresiile regulate|
 +|**\c**|caută o potrivire cu caracterul care urmează semnului '\'. Util pentru a căuta caractere care singure au un rol special (ex. '.', '?'...)|
 +|**\a**|caracterul chr(7)|
 +|**\f**|caracterul chr(12)|
 +|**\n**|caracterul de linie nouă chr(10)|
 +|**\r**|caracterul chr(13)|
 +|**\t**|caracterul tabulator chr(9)|
 +|**\v**|caracterul chr(11)|
 +|**\xhhhh**|un caracter Unicode cu codul exprimat în sistemul hexazecimal cu numărul hhhh (între 0x0000 și 0xFFFF)|
 +|**\0ooo**|un caracter ASCII/Latin1 având codul exprimat în sistemul octal ooo (între 0 și 0377)|
 +|**.** (punct)|orice caracter, inclusiv caracterul linie nouă|
 +|**\d**|o cifră|
 +|**\D**|un caracter care nu este o cifră|
 +|**\s**|un caracter de spațiere|
 +|**\S**|un caracter care nu este unul de spațiere|
 +|**\w**|o cifră, o literă sau caracterul '_'|
 +|**\W**|un caracter care nu este o cifră, o literă sau caracterul '_'|
 +|**\1 \2 ... \9**|referință 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:
 ^Expresie^Descriere^Expresie regulată^Potriviri^Echivalent cu^ ^Expresie^Descriere^Expresie regulată^Potriviri^Echivalent cu^
-|?|una sau nicio apariție|"maci?"|"mac", "maci"|{0,1}| +|**?**|una sau nicio apariție|"maci?"|"mac", "maci"|{0,1}| 
-|+|una sau mai multe apariții|"0+"|"0", "00", "000" etc.|{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,}| +|*****|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}**|un număr de n apariții|"x{5}"|"xxxxx"|{n,n}| 
-|{n,}|cel puțin n apariții| | | | +|**{n,}**|cel puțin n apariții| | | | 
-|{,m}|cel mult m apariții| | |{0,m}| +|**{,m}**|cel mult m apariții| | |{0,m}| 
-|{n,m}|cel puțin n apariții și cel mult m apariții| | | |+|**{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|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. 
 +^Expresie^Descriere^ 
 +|**^**|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.| 
 +|**\b**|semnifică 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"
 +|**\B**|semnifică 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".| 
  
-<code> 
-</code> 
  
ro/regularexpressions.1504642167.txt.gz · Last modified: 2020/02/28 10:46 (external edit)