Mønster Matching i strenger i Groovy

1. Oversikt

I denne artikkelen ser vi på Groovy-språkfunksjonene for mønstermatching i strenger.

Vi får se hvordan Groovys batteri-inkluderte tilnærming gir oss en kraftig og ergonomisk syntaks for våre grunnleggende mønstermatchingsbehov.

2. Mønsteroperatør

Groovy-språket introduserer den såkalte mønsteroperatøren ~. Denne operatøren kan betraktes som en syntaktisk sukkergenvei til Java java.util.regex.Pattern.compile (streng) metode.

La oss sjekke det ut i praksis som en del av en Spock test:

def "mønsteroperatøreksempel" () {gitt: "et mønster" def p = ~ 'foo' forvent: p forekomst av mønster og: "du kan bruke slashy strenger for å unngå å unnslippe svarte skråstreker" def digitPattern = ~ / \ d * / digitPattern.matcher ('4711'). treff ()}

Dette er også ganske praktisk, men vi ser at denne operatøren bare er grunnlinjen for noen andre, enda mer nyttige operatører.

3. Matchoperatør

Mesteparten av tiden, og spesielt når vi skriver tester, er vi ikke veldig interessert i å lage Mønster objekter, men i stedet ønsker å sjekke om en String samsvarer med et bestemt regulært uttrykk (eller Mønster). Groovy inneholder derfor også kampoperatøren ==~.

Det returnerer a boolsk og utfører en streng kamp mot det spesifiserte regulære uttrykket. I utgangspunktet er det en syntaktisk snarvei over å ringe Mønster. Samsvarer (regex, streng).

Igjen, vi vil se på det i praksis som en del av en Spock test:

def "match operator example" () {expect: 'foobar' == ~ /.*oba.*/ og: "matching is strict"! ('foobar' == ~ / foo /)}

4. Finn operatør

Den siste Groovy-operatøren i sammenheng med mønstermatching er finnoperatøren ~=. I dette tilfellet vil operatøren direkte opprette og returnere a java.util.regex.Matcher forekomst.

Vi kan handle på dette Matcher for eksempel, selvfølgelig, ved å få tilgang til de kjente Java API-metodene. Men i tillegg har vi også tilgang til matchede grupper ved hjelp av en flerdimensjonal matrise.

Og det er ikke alt - Matcher forekomst vil automatisk tvinge til en boolsk skriv ved å ringe sin finne() metoden hvis den brukes som et predikat. Siterer de offisielle Groovy-dokumentene, betyr dette "operatøren = ~ er i samsvar med den enkle bruken av Perls = ~ operatør".

Her ser vi operatøren i aksjon:

def "finn operatøreksempel" () {når: "bruk søkeoperatøren" def matcher = 'foo og bar, baz og buz' = ~ / (\ w +) og (\ w +) / deretter: "vil finne grupper" matcher .størrelse () == 2 og: "har tilgang til grupper ved hjelp av matrisen" matcher [0] [0] == 'foo and bar' matcher [1] [2] == 'buz' og: "du kan bruke den som et predikat "'foobarbaz' = ~ / bar /}

5. Konklusjon

Vi har sett hvordan Groovy-språket gir oss tilgang til de innebygde Java-funksjonene angående regulære uttrykk på en veldig praktisk måte.

Den offisielle Groovy-dokumentasjonen inneholder også noen korte eksempler på dette emnet. Det er spesielt kult hvis du vurderer at kodeeksemplene i dokumentene kjøres som en del av dokumentasjonsbyggingen.

Som alltid kan kodeeksempler finnes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found