User Tools

Site Tools


ro:regularexpressions

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ro:regularexpressions [2017/09/05 15:45]
junior-root
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,+
  
-=== Abrevieri de caractere ===+==== Abrevieri de caractere ====
  
-^Element^Potrivire^Text de căutat și potriviri^Expresie regulată+^Expresie^Descriere
-|**c**|un caracter, atâta timp cât acesta nu are o altă semnificație în expresiile regulate|"un ș**ori**cel"|"ori"+|**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. '.', '?'...)|"Semne:!@#**?**#%**?**"|"\?"+|**\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)| | +|**\a**|caracterul chr(7)| 
-|**\f**|caracterul chr(12)| | +|**\f**|caracterul chr(12)| 
-|**\n**|caracterul de linie nouă chr(10)| | +|**\n**|caracterul de linie nouă chr(10)| 
-|**\r**|caracterul chr(13)| | +|**\r**|caracterul chr(13)| 
-|**\t**|caracterul tabulator chr(9)| | +|**\t**|caracterul tabulator chr(9)| 
-|**\v**|caracterul chr(11)| | +|**\v**|caracterul chr(11)| 
-|**\xhhhh**|un caracter Unicode cu codul exprimat în sistemul hexazecimal cu numărul hhhh (între 0x0000 și 0xFFFF)| | +|**\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)| | +|**\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"+|**.** (punct)|orice caracter, inclusiv caracterul linie nouă| 
-|**\d**|o cifră|""|""+|**\d**|o cifră| 
-|**\D**|un caracter care nu este o cifră|""|""+|**\D**|un caracter care nu este o cifră| 
-|**\s**|un caracter de spațiere|""|""+|**\s**|un caracter de spațiere| 
-|**\S**|un caracter care nu este unul de spațiere|""|""+|**\S**|un caracter care nu este unul de spațiere| 
-|**\w**|o cifră, o literă sau caracterul '_'|""|""+|**\w**|o cifră, o literă sau caracterul '_'
-|**\W**|un caracter care nu este 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)|""|""|+|**\1 \2 ... \9**|referință din urmă (același text capturat de ultimul grup de capturare)|
  
-=== Seturi de caractere ===+==== 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:\\ 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 minus/cratimă '-' definește un interval\\
Line 37: Line 36:
 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. 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 ===+==== Cuantificatori ====
 În mod implicit, o expresie este așteptată să apară o singură dată. Acest lucru poate fi schimbat cu ajutorul cuantificatorilor: Î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^
Line 48: Line 47:
 |**{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.1504647947.txt.gz · Last modified: 2020/02/28 10:46 (external edit)