Mønster matchning i strenge i Groovy

1. Oversigt

I denne artikel vil vi se på Groovy-sprogfunktionerne til mønstermatchning i strenge.

Vi får se, hvordan Groovys batteri-inkluderede tilgang giver os en kraftfuld og ergonomisk syntaks til vores grundlæggende mønstermatchning.

2. Mønsteroperatør

Groovy-sproget introducerer den såkaldte mønsteroperator ~. Denne operatør kan betragtes som en syntaktisk sukkergenvej til Java'er java.util.regex.Pattern.compile (streng) metode.

Lad os tjekke det ud i praksis som en del af en Spock prøve:

def "eksempel på mønsteroperatør" () {givet: "et mønster" def p = ~ 'foo' forvent: p forekomst af mønster og: "du kan bruge skråstreger for at undgå at undslippe sortblink" def digitPattern = ~ / \ d * / digitPattern.matcher ('4711'). matches ()}

Dette er også ret praktisk, men vi vil se, at denne operatør kun er basislinjen for nogle andre, endnu mere nyttige operatører.

3. Match operatør

Det meste af tiden, og især når vi skriver tests, er vi ikke rigtig interesserede i at oprette Mønster objekter, men i stedet ønsker at kontrollere, om en Snor matcher et bestemt regulært udtryk (eller Mønster). Groovy indeholder derfor også matchoperatøren ==~.

Det returnerer en boolsk og udfører en streng matchning med det angivne regulære udtryk. Dybest set er det en syntaktisk genvej over opkald Mønster. Matcher (regex, streng).

Igen vil vi se nærmere på det i praksis som en del af en Spock prøve:

def "matchoperatøreksempel" () {forvent: 'foobar' == ~ /.*oba.*/ og: "matching er streng"! ('foobar' == ~ / foo /)}

4. Find operatør

Den sidste Groovy-operatør i forbindelse med mønstermatchning er find-operatoren ~=. I dette tilfælde opretter og returnerer operatøren direkte en java.util.regex.Matcher eksempel.

Vi kan reagere på dette Matcher eksempelvis ved at få adgang til dets kendte Java API-metoder. Men derudover har vi også adgang til matchede grupper ved hjælp af et flerdimensionelt array.

Og det er ikke alt - det Matcher instans tvinges automatisk til en boolsk skriv ved at kalde dens finde() metode, hvis den bruges som et prædikat. Citerer de officielle Groovy-dokumenter, betyder det "operatøren = ~ er i overensstemmelse med den enkle brug af Perls = ~ operatør".

Her ser vi operatøren i aktion:

def "find operator example" () {når: "ved hjælp af find operator" def matcher = 'foo og bar, baz og buz' = ~ / (\ w +) og (\ w +) / derefter: "finder grupper" matcher .størrelse () == 2 og: "kan få adgang til grupper ved hjælp af array" matcher [0] [0] == 'foo og bar' matcher [1] [2] == 'buz' og: "du kan bruge den som et prædikat "'foobarbaz' = ~ / bar /}

5. Konklusion

Vi har set, hvordan Groovy-sproget giver os adgang til de indbyggede Java-funktioner vedrørende regulære udtryk på en meget bekvem måde.

Den officielle Groovy-dokumentation indeholder også nogle koncise eksempler på dette emne. Det er især sejt, hvis du overvejer, at kodeeksemplerne i dokumenterne udføres som en del af dokumentationsopbygningen.

Som altid kan kodeeksempler findes på GitHub.