Deblocarea puterii expresiilor regulate avansate

Expresiile regulate (regex) oferă instrumente robuste pentru potrivirea modelelor și manipularea textului. Acest articol explorează conceptele regex avansate care vă permit să abordați sarcini complicate de procesare a textului cu precizie și eficiență.

Afirmații privind privirea înainte și în urmă

Aserțiunile de tip lookahead și lookbehind vă permit să potriviți un model numai dacă este precedat sau urmat de un alt model. Sunt utile pentru a asigura contextul fără a-l include în meci.

  • Privire pozitivă (?=...): Asigură că modelul se potrivește numai dacă este urmat de expresia specificată.
  • Lookahead negativ (?!...): Asigură că modelul se potrivește numai dacă nu este urmat de expresia specificată.
  • Positive Lookbehind (?<=...): Asigură că modelul se potrivește numai dacă este precedat de expresia specificată.
  • Privire în urmă negativă (?<!...): Asigură că modelul se potrivește numai dacă nu este precedat de expresia specificată.

Exemplu:

(?<=Mr\.\s|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}-)?(?(1)\d{3}-\d{4}|\d{7})

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 care nu ține seama de 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.