Download PDF

Expresia regulată este un grup de caractere sau simboluri care este folosit pentru a găsi un model specific dintr-un text; le puteți numi wildcards pe steroizi, dacă doriți. În calitate de dezvoltator, stăpânirea expresiilor regulate poate fi un instrument puternic pe care să îl aveți în centura de instrumente; cu siguranță va trebui să le folosiți în programele dvs. la un moment dat, căutarea și înlocuirea folosind expresii regulate în IDE-uri este foarte utilă uneori, iar eu mă trezesc folosindu-le în linia de comandă în fiecare zi.

Diferite aplicații și limbaje de programare pot avea implementări diferite pentru expresiile regulate, dar conceptele de bază sunt în mare parte aceleași. În această postare, voi explica tot ceea ce trebuie să știți despre expresiile regulate.

O expresie regulată este un model care se potrivește cu un șir subiect de la stânga la dreapta. Cuvântul „Expresie regulată” este o gură de aer, de obicei veți găsi termenul prescurtat ca „regex” sau „regexp”. Expresia regulată este utilizată pentru înlocuirea unui text într-un șir de caractere, validarea formularului, extragerea unei subșiruri dintr-un șir de caractere pe baza unei potriviri de tipare și multe altele.

Imaginați-vă că scrieți o aplicație și doriți să stabiliți regulile pentru momentul în care un utilizator își alege numele de utilizator. Vrem să permitem ca numele de utilizator să conțină litere, numere, sublinieri și cratime. De asemenea, dorim să limităm numărul de caractere în numele de utilizator pentru ca acesta să nu arate urât. Utilizăm următoarea expresie regulată pentru a valida un nume de utilizator:

Expresie regulată

Expresia regulată de mai sus poate accepta șirurile john_doe, jo-hn_doe și john12_as. Nu se potrivește cu Jo deoarece acest șir conține litere majuscule și, de asemenea, este prea scurt.

Tabloul cuprinsului

  • Corelatori de bază
  • Caracter meta
  • Full stop
  • Set de caractere
  • Set de caractere negative
  • Set de caractere negative
  • Repetiții
  • Setul de caractere Steaua
  • Maiul
  • Semnul de întrebare
  • Brățări
  • Grup de caractere
  • Alternanță
  • Caracter special de evadare
  • Ancore
  • Caret
  • .

  • Dolar
  • Seturi de caractere prescurtate
  • Lokaround
  • Positive Lookahead
  • Negative Lookahead
  • Positive Lookbehind
  • Flags
  • Flags
  • Case Insensitive
  • Case Insensitive
  • .

  • Cercetare globală
  • Multilinie
  • Corectare greoaie vs. leneșă

Basic Matchers

O expresie regulată este doar un model de caractere pe care îl folosim pentru a efectua
cercetare într-un text. De exemplu, expresia regulată the înseamnă: litera
t, urmată de litera h, urmată de litera e.

the => The fat cat sat on the mat.

Testă expresia regulată

Expresia regulată 123se potrivește cu șirul 123. Expresia regulată se potrivește cu un șir de intrare prin compararea fiecărui caracter din expresia regulată
cu fiecare caracter din șirul de intrare, unul după altul. Expresiile regulate
sunt, în mod normal, sensibile la majuscule și minuscule, astfel încât expresia regulată The nu s-ar
potrivi cu șirul the.

The => The fat cat sat on the mat.

Testă expresia regulată

Caracterele meta

Caracterele meta sunt elementele de bază ale expresiilor regulate. Caracterele meta
nu sunt de sine stătătoare, dar în schimb sunt interpretate într-un mod
special. Unele caractere meta au o semnificație specială și sunt scrise în interiorul parantezelor pătrate. Caracterele meta sunt următoarele:

2.1 Punct final

Punctul final . este cel mai simplu exemplu de caracter meta. Caracterul meta .
se potrivește cu orice caracter unic. Nu se potrivește cu caracterele de revenire sau de linie nouă.
De exemplu, expresia regulată .ar înseamnă: orice caracter, urmat de litera a, urmat de litera r.

.ar => The car parked in the garage.

Testă expresia regulată

2.2 Set de caractere

Seturile de caractere se mai numesc și clasă de caractere. Parantezele pătrate sunt utilizate pentru a
specifica seturile de caractere. Folosiți o cratimă în interiorul unui set de caractere pentru a specifica intervalul de caractere. Ordinea intervalului de caractere din interiorul parantezelor pătrate
nu contează. De exemplu, expresia regulată he înseamnă: o majusculă T sau o minusculă t, urmată de litera h, urmată de litera e.

he => The car parked in the garage.

Testă expresia regulată

Un punct în interiorul unui set de caractere, totuși, înseamnă un punct literal. Expresia regulată
expresia ar înseamnă: un caracter minuscul a, urmat de litera r,
urmată de un caracter punct ..

ar => A garage is a good place to park a car.

Testă expresia regulată

2.2.1 Set de caractere negate

În general, simbolul caret reprezintă începutul șirului de caractere, dar atunci când este
titluit după paranteza pătrată de deschidere, acesta neagă setul de caractere. De
exemplu, expresia regulată ar înseamnă: orice caracter cu excepția c,
urmat de caracterul a, urmat de litera r.

ar => The car parked in the garage.

Testă expresia regulată

2.3 Repetiții

Caracterele meta care urmează +, * sau ? sunt folosite pentru a specifica de câte ori poate apărea un submodel. Aceste metacaractere acționează diferit în diferite
situații.

2.3.1 Steaua

Simbolul *se potrivește cu zero sau mai multe repetiții ale matcherului precedent. Expresia regulată a* înseamnă: zero sau mai multe repetări ale caracterului minuscul a precedent. Dar dacă apare după un set de caractere sau o clasă, atunci găsește repetițiile întregului set de caractere. De exemplu, expresia regulată * înseamnă: orice număr de litere minuscule la rând.

* => The car parked in the garage #21.

Testă expresia regulată

Simbolul * poate fi folosit cu metacaracterul . pentru a se potrivi cu orice șir de caractere
caractere .*. Simbolul * poate fi utilizat cu caracterul de spații albe \s
pentru a se potrivi cu orice șir de caractere de spații albe. De exemplu, expresia
\s*cat\s* înseamnă: zero sau mai multe spații, urmate de caracterul minuscul c,
urmat de caracterul minuscul a, urmat de caracterul minuscul t, urmat de zero sau mai multe spații.

\s*cat\s* => The fat cat sat on the concatenation.

Testă expresia regulată

2.3.2. Plusul

Simbolul +se potrivește cu una sau mai multe repetări ale caracterului precedent. De exemplu, expresia regulată c.+t înseamnă: litera minusculă c, urmată de cel puțin un caracter, urmat de caracterul minuscul t. Trebuie clarificat faptul că t este ultimul t din propoziție.

c.+t => The fat cat sat on the mat.

Testă expresia regulată

2.3.3. Semnul de întrebare

În expresia regulată, metacaracterul ? face caracterul precedent
opțional. Acest simbol se potrivește cu zero sau o instanță a caracterului precedent. De exemplu, expresia regulată ?he înseamnă: ?he: Opțional litera majusculă T, urmată de caracterul minuscul h, urmat de caracterul minuscul e.

he => The car is parked in the garage.

Testă expresia regulată

?he => The car is parked in the garage.

Testă expresia regulată

2.4 Paranteze

În expresiile regulate parantezele care se mai numesc și cuantificatori sunt folosite pentru a
specifica numărul de ori în care un caracter sau un grup de caractere poate fi
repetat. De exemplu, expresia regulată {2,3} înseamnă: {2,3}: Potrivește cel puțin 2 cifre, dar nu mai mult de 3 ( caractere în intervalul de la 0 la 9).

{2,3} => The number was 9.9997 but we rounded it off to 10.0.

Testă expresia regulată

Potem omite cea de-a doua cifră. De exemplu, expresia regulată
{2,} înseamnă: Potrivește 2 sau mai multe cifre. Dacă eliminăm și virgula, expresia regulată
expresia regulată {3} înseamnă: {3}: Potrivește exact 3 cifre.

{2,} => The number was 9.9997 but we rounded it off to 10.0.

Testă expresia regulată

{3} => The number was 9.9997 but we rounded it off to 10.0.

Testă expresia regulată

2.5 Grup de caractere

Grupul de caractere este un grup de submodele care se scrie în interiorul parantezelor (…). După cum am discutat anterior, în expresia regulată, dacă punem un cuantificator după un caracter, atunci acesta va repeta caracterul precedent. Dar dacă punem un cuantificator după un grup de caractere, atunci se repetă întregul grup de caractere. De exemplu, expresia regulată (ab)* se potrivește cu zero sau mai multe repetări ale caracterului ab. De asemenea, putem folosi alternanța | metacaracter în interiorul grupului de caractere. De exemplu, expresia regulată (c|g|p)ar înseamnă: caracterul minuscul c, g sau p, urmat de caracterul a, urmat de caracterul r.

(c|g|p)ar => The car is parked in the garage.

Testă expresia regulată

2.6 Alternanță

În expresia regulată Bara verticală | este utilizată pentru a defini alternanța. Alternanța este ca o condiție între mai multe expresii. Acum, poate vă gândiți că setul de caractere și alternanța funcționează în același mod. Dar marea diferență dintre setul de caractere și alternanță este că setul de caractere funcționează la nivel de caracter, dar alternanța funcționează la nivel de expresie. De exemplu, expresia regulată (T|t)he|car înseamnă: caracterul majusculă T sau minusculă t, urmat de caracterul minusculă h, urmat de caracterul minusculă e sau caracterul minusculă c, urmat de caracterul minusculă a, urmat de caracterul minusculă r.

(T|t)he|car => The car is parked in the garage.

Testă expresia regulată

2.7 Evadarea caracterului special

Backslash \ este utilizat în expresia regulată pentru a evada caracterul următor. Aceasta
ne permite să specificăm un simbol ca și caracter de potrivire, inclusiv caracterele rezervate
{ } / \ + * . $ ^ | ?. Pentru a utiliza un caracter special ca și caracter de potrivire, adăugați \ înaintea acestuia.

De exemplu, expresia regulată . este utilizată pentru a se potrivi cu orice caracter cu excepția
newline. Acum, pentru a se potrivi cu . într-un șir de intrare, expresia regulată (f|c|m)at\.? înseamnă: litera minusculă f, c sau m urmată de caracterul minuscul
a, urmat de litera minusculă t, urmată de caracterul opțional ..

(f|c|m)at\.? => The fat cat sat on the mat.

Testă expresia regulată

2.8 Ancore

În expresiile regulate, folosim ancore pentru a verifica dacă simbolul care se potrivește este simbolul
de început sau simbolul de sfârșit al șirului de intrare. Ancorele sunt de două tipuri: Primul tip este Caret ^ care verifică dacă caracterul care se potrivește este caracterul de început
al șirului de intrare, iar al doilea tip este Dollar $ care verifică dacă caracterul care se potrivește
este ultimul caracter al șirului de intrare.

2.8.1 Caret

Simbolul Caret ^ este utilizat pentru a verifica dacă caracterul care se potrivește este primul caracter
al șirului de intrare. Dacă aplicăm următoarea expresie regulată ^a (dacă a este
simbolul de început) la șirul de intrare abc, aceasta se potrivește cu a. Dar dacă aplicăm expresia regulată ^b la șirul de intrare de mai sus, aceasta nu se potrivește cu nimic. Deoarece în șirul de intrare abc b nu este simbolul de început. Să ne uităm la o altă expresie regulată ^(T|t)he care înseamnă: caracterul majusculă T sau caracterul minusculă t este simbolul de început al șirului de intrare, urmat de
caracterul minusculă h, urmat de caracterul minusculă e.

(T|t)he => The car is parked in the garage.

Testă expresia regulată

^(T|t)he => The car is parked in the garage.

Testă expresia regulată

2.8.2 Dolar

Simbolul dolar $ este utilizat pentru a verifica dacă caracterul corespunzător este ultimul caracter
din șirul de intrare. De exemplu, expresia regulată (at\.)$ înseamnă: un caracter minuscul a, urmat de un caracter minuscul t, urmat de un caracter ., iar caracterul de potrivire trebuie să fie sfârșitul șirului.

(at\.) => The fat cat. sat. on the mat.

Testă expresia regulată

(at\.)$ => The fat cat. sat. on the mat.

Testă expresia regulată

Seturi de caractere prescurtate

Expresia regulată oferă prescurtări pentru seturile de caractere utilizate în mod obișnuit, care oferă prescurtări convenabile pentru expresiile regulate utilizate în mod obișnuit. Seturile de caractere prescurtate sunt următoarele:

Lookaround

Lookbehind și lookahead (numite și lookaround) sunt tipuri specifice de
grupuri care nu se captează (utilizate pentru a se potrivi cu modelul, dar care nu sunt incluse în lista de potrivire). Lookaheads se utilizează atunci când avem condiția ca acest model să fie precedat sau urmat de un alt anumit model. De exemplu, dorim să obținem toate numerele care sunt precedate de caracterul $ din următorul șir de intrare .44 and .88. Vom utiliza următoarea expresie regulată (?<=$)* care înseamnă: obține toate numerele care conțin caracterul . și sunt precedate de caracterul $. În continuare sunt prezentate variantele de căutare care sunt utilizate în expresiile regulate:

4.1 Lookahead pozitiv

Lokahead pozitiv afirmă că prima parte a expresiei trebuie să fie
urmată de expresia lookahead. Potrivirea returnată conține numai textul la care se potrivește prima parte a expresiei. Pentru a defini un
lookahead pozitiv, se utilizează paranteze. În cadrul acestor paranteze, se folosește un semn de întrebare cu semnul egal, după cum urmează: (?=…). Expresia Lookahead se scrie după semnul egal în interiorul parantezelor. De exemplu, expresia regulată
(T|t)he(?=\sfat) înseamnă: opțional, se potrivește cu litera minusculă t sau cu litera majusculă T, urmată de litera h, urmată de litera e. În paranteze definim lookahead pozitiv care îi spune motorului de expresii regulate să se potrivească cu The sau the care sunt urmate de cuvântul fat.

(T|t)he(?=\sfat) => The fat cat sat on the mat.

Testă expresia regulată

4.2 Lookahead negativ

Negative lookahead este utilizat atunci când trebuie să obținem toate potrivirile din șirul de intrare
care nu sunt urmate de un model. Lookahead negativ se definește la fel ca și lookahead pozitiv, dar singura diferență este că, în loc de caracterul = egal, folosim caracterul de negație !, adică (?!…). Să analizăm următoarea expresie regulată (T|t)he(?!\sfat) care înseamnă: obține toate cuvintele The sau the din șirul de intrare care nu sunt urmate de cuvântul fat precedat de un caracter de spațiu.

(T|t)he(?!\sfat) => The fat cat sat on the mat.

Testă expresia regulată

4.3 Positive Lookbehind

Positive lookbehind se utilizează pentru a obține toate corespondențele care sunt precedate de un tipar
specific. Lookbehind pozitiv este notat cu (?<=…). De exemplu, expresia regulată (?<=(T|t)he\s)(fat|mat) înseamnă: obține toate cuvintele fat sau mat din șirul de intrare care se află după cuvântul The sau the.

(?<=(T|t)he\s)(fat|mat) => The fat cat sat on the mat.

Testă expresia regulată

4.4 Negative Lookbehind

Negative lookbehind se utilizează pentru a obține toate corespondențele care nu sunt precedate de un model specific
. Negative lookbehind este notat cu (?<!…). De exemplu, expresia regulată (?<!(T|t)he\s)(cat) înseamnă: obține toate cat cuvintele cat din șirul de intrare care nu sunt după cuvântul The sau the.

(?<!(T|t)he\s)(cat) => The cat sat on cat.

Testă expresia regulată

Flags

Flags se mai numesc și modificatori pentru că modifică ieșirea unei expresii regulate
. Aceste stegulețe pot fi folosite în orice ordine sau combinație și sunt o parte
integrală a RegExp.

5.1 Insensibilitate la majuscule și minuscule

Modificatorul ieste folosit pentru a efectua o potrivire insensibilă la majuscule și minuscule. De exemplu, expresia regulată /The/gi înseamnă: litera majusculă T, urmată de caracterul minuscul h, urmat de caracterul e. Iar la sfârșitul expresiei regulate, indicatorul i îi spune motorului de expresii regulate să ignore majusculele și minusculele. După cum puteți vedea, am furnizat și stegulețul g deoarece dorim să căutăm tiparul în întregul șir de intrare.

The => The fat cat sat on the mat.

Testarea expresiei regulate

/The/gi => The fat cat sat on the mat.

Testarea expresiei regulate

5.2 Căutare globală

Modificatorul g este utilizat pentru a efectua o potrivire globală (găsirea tuturor corespondențelor în loc să se oprească după prima potrivire). De exemplu, expresia regulată /.(at)/g înseamnă: orice caracter, cu excepția liniei noi, urmat de caracterul minuscul a, urmat de caracterul minuscul t. Deoarece am furnizat stegulețul g la sfârșitul expresiei regulate, acum aceasta va găsi toate corespondențele din șirul de intrare, nu doar pe prima (care este comportamentul implicit).

/.(at)/ => The fat cat sat on the mat.

Testă expresia regulată

/.(at)/g => The fat cat sat on the mat.

Testă expresia regulată

5.3 Multiline

Modificatorul m este utilizat pentru a efectua o corespondență pe mai multe linii. După cum am discutat anterior
ancorele (^, $) sunt utilizate pentru a verifica dacă modelul este începutul sau sfârșitul șirului de intrare. Dar dacă dorim ca ancorele să funcționeze pe fiecare linie, folosim indicatorul
m. De exemplu, expresia regulată /at(.)?$/gm înseamnă: caracter minuscul
caracter a, urmat de caracterul minuscul t, opțional orice, cu excepția
liniei noi. Și datorită stegulețului m, acum motorul de expresii regulate potrivește modelul la sfârșitul fiecărei linii dintr-un șir de caractere.

/.at(.)?$/ => The fat
cat sat
on the mat.

Testă expresia regulată

"/.at(.)?$/gm" => The fat
cat sat
on the mat.

Testă expresia regulată

Potrivire lacomă vs. leneșă

În mod implicit, regex va face o potrivire lacomă, ceea ce înseamnă că va potrivi atât timp cât
este posibil. Putem folosi ? pentru a se potrivi în mod leneș înseamnă cât mai scurt posibil

/(.*at)/ => The fat cat sat on the mat.

Testă expresia regulată

/(.*?at)/ => The fat cat sat on the mat.

Testă expresia regulată

Și cu asta, această postare se încheie. Sper că această postare v-a fost de ajutor. Asigurați-vă că practicați ceea ce ați învățat folosind servicii precum regexr.com sau regex101.com.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.