Mestring av komplekse regulære uttrykk

Regular Expressions (regex) er allsidige verktøy for mønstertilpasning og tekstmanipulering. Denne opplæringen utforsker avanserte regex-teknikker som hjelper deg å administrere komplekse tekstbehandlingsscenarier mer effektivt.

Se bak påstander

Lookbehind-påstander lar deg matche et mønster bare hvis det innledes med et annet mønster. Dette er nyttig for å sikre kontekst uten å inkludere det i kampen.

  • Positiv lookbehind (?<=...): Matcher mønsteret bare hvis det innledes med det spesifiserte uttrykket.
  • Negativt Lookbehind (?<!...): Matcher mønsteret bare hvis det ikke innledes med det spesifiserte uttrykket.

Eksempel:

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

Dette regulære uttrykket samsvarer med navn som er innledet med "Mr." eller "Mrs.".

Betingede mønstre

Betingede mønstre lar deg matche forskjellige mønstre basert på om en bestemt betingelse er oppfylt. Syntaksen er (?(tilstand)true-pattern|false-pattern).

Eksempel:

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

Dette regulære uttrykket samsvarer med telefonnumre med eller uten retningsnummer.

Subrutiner og rekursjon

Subrutiner og rekursjon lar deg gjenbruke mønstre innenfor samme regulære uttrykk eller matche nestede strukturer. Dette er spesielt nyttig for komplekse og nestede data.

Eksempel:

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

Dette regulære uttrykket samsvarer med balanserte parenteser med nestede nivåer.

Besittende kvantifiserere

Besittende kvantifiserere forhindrer regex-motoren fra å spore tilbake, noe som kan forbedre ytelsen når du vil sikre at ingen tilbakesporing skjer.

Eksempel:

\w++

Dette regulære uttrykket samsvarer med en sekvens av ordtegn, noe som betyr at den ikke vil gi opp tegn når de er matchet.

Bruke flagg for forbedret samsvar

Regex-flagg endrer oppførselen til mønstertilpasningen. Noen vanlige flagg inkluderer:

  • 'i': Uavhengig av store og små bokstaver.
  • 'm': Flerlinjemodus, som påvirker oppførselen til ^ og $.
  • 's': Dotall-modus, som lar . matche nylinjetegn.
  • 'x': Ignorer mellomrom og tillat kommentarer innenfor mønsteret for lesbarhet.

Eksempel:

/pattern/imsx

Dette mønsteret bruker modusene som ikke skiller mellom store og små bokstaver, multiline, dotall og utvidet.

Eksempler i programmeringsspråk

Her er noen eksempler på bruk av avansert regex i Python og JavaScript:

Python eksempel

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)

JavaScript-eksempel

// 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));
}

Konklusjon

Avanserte regex-teknikker som lookbehind-påstander, betingede mønstre, subrutiner, rekursjon og possessive kvantifiserere utvider mulighetene til regex for kompleks tekstbehandling. Å mestre disse konseptene gjør at du kan håndtere sofistikerte match- og manipulasjonsoppgaver med større effektivitet og presisjon.