Stăpânirea expresiilor regulate complexe

Expresiile regulate (regex) sunt instrumente versatile pentru potrivirea modelelor și manipularea textului. Acest tutorial explorează tehnici avansate de expresii regex care vă ajută să gestionați mai eficient scenariile complexe de procesare a textului.

Afirmațiile privite în urmă

Aserțiunile din urmă vă permit să potriviți un model numai dacă este precedat de un alt model. Acest lucru este util pentru a asigura contextul fără a-l include în meci.

  • Privire pozitivă în urmă (?<=...): Se potrivește cu modelul numai dacă este precedat de expresia specificată.
  • Privire în urmă negativă (?<!...): Se potrivește cu modelul numai dacă nu este precedat de expresia specificată.

Exemplu:

(?<=Mr\.|Mrs\.)\s[A-Z]\w+

Această expresie regex se potrivește cu numele care sunt precedate de "Mr." sau "Mrs.".

Modele condiționate

Tiparele condiționate vă permit să potriviți diferite modele în funcție de îndeplinirea unei anumite condiții. Sintaxa este (?(condiție)true-pattern|false-pattern).

Exemplu:

(\d{3}-)?\d{3}-\d{4}

Această expresie regex se potrivește numerelor de telefon cu sau fără prefix.

Subrutine și recursivitate

Subrutinele și recursiunea vă permit să reutilizați modele din aceeași regex sau să potriviți structuri imbricate. Acest lucru este util în special pentru date complexe și imbricate.

Exemplu:

(?<group>\((?>[^()]+|(?&group))*\))

Această expresie regex se potrivește cu paranteze echilibrate cu niveluri imbricate.

Cuantificatori posesivi

Cuantificatorii posesivi împiedică motorul regex să se întoarcă înapoi, ceea ce poate îmbunătăți performanța atunci când doriți să vă asigurați că nu are loc nicio întoarcere.

Exemplu:

\w++

Această expresie regex se potrivește cu o secvență de caractere de cuvinte în mod posesiv, ceea ce înseamnă că nu va renunța la caractere odată ce sunt potrivite.

Utilizarea steaguri pentru potrivire îmbunătățită

Indicatoarele Regex modifică comportamentul potrivirii modelului. Unele steaguri comune includ:

  • 'i': Potrivire fără majuscule.
  • 'm': Modul multilinie, care afectează comportamentul ^ și $.
  • 's': Modul Dotall, permițând . să se potrivească cu caractere newline.
  • 'x': Ignorați spațiile albe și permiteți comentarii în cadrul modelului pentru lizibilitate.

Exemplu:

/pattern/imsx

Acest model aplică modurile care nu țin cont de majuscule și minuscule, mai multe linii, puncte și modurile extinse.

Exemple în limbaje de programare

Iată câteva exemple de utilizare a expresiilor regex avansate în Python și JavaScript:

Exemplu Python

import re

# Match a name preceded by Mr. or Mrs.
pattern = r'(?<=Mr\.|Mrs\.)\s[A-Z]\w+'
text = 'Mr. Smith and Mrs. Johnson'
matches = re.findall(pattern, text)

for match in matches:
    print('Match found:', match)

Exemplu JavaScript

// Match a name preceded by Mr. or Mrs.
const pattern = /(?<=Mr\.|Mrs\.)\s[A-Z]\w+/g;
const text = 'Mr. Smith and Mrs. Johnson';
const matches = text.match(pattern);

if (matches) {
    matches.forEach(match => console.log('Match found:', match));
}

Concluzie

Tehnicile avansate de regex, cum ar fi aserțiunile de tip lookbehind, modelele condiționate, subrutinele, recursiunea și cuantificatorii posesivi extind capacitățile regex pentru procesarea complexă a textului. Stăpânirea acestor concepte vă permite să gestionați sarcini sofisticate de potrivire și manipulare cu o mai mare eficiență și precizie.