Patroonaanpassing in snaren in Groovy

1. Overzicht

In dit artikel zullen we kijken naar de Groovy-taalfuncties voor patroonovereenkomst in Strings.

We zullen zien hoe Groovy's benadering met batterijen ons een krachtige en ergonomische syntaxis biedt voor onze basisbehoeften voor patroonafstemming.

2. Patroonoperator

De taal van Groovy introduceert de zogenaamde patroonoperator ~. Deze operator kan worden beschouwd als een syntactische suikersnelkoppeling naar Java's java.util.regex.Pattern.compile (tekenreeks) methode.

Laten we het in de praktijk bekijken als onderdeel van een Spock test:

def "patroon operator voorbeeld" () {gegeven: "een patroon" def p = ~ 'foo' verwacht: p instantie van patroon en: "je kunt slashy strings gebruiken om te voorkomen dat je aan blackslash ontsnapt" def digitPattern = ~ / \ d * / digitPattern.matcher ('4711'). matches ()}

Dit is ook best handig, maar we zullen zien dat deze operator slechts de basis is voor een aantal andere, nog nuttiger operators.

3. Match Operator

Meestal, en vooral bij het schrijven van tests, zijn we niet echt geïnteresseerd in het maken Patroon objecten, maar wil in plaats daarvan controleren of a Draad komt overeen met een bepaalde reguliere expressie (of Patroon). Groovy bevat daarom ook de match-operator ==~.

Het retourneert een boolean en voert een strikte overeenkomst uit met de opgegeven reguliere expressie. Kortom, het is een syntactische snelkoppeling voor bellen Pattern.matches (regex, string).

Nogmaals, we zullen het in de praktijk onderzoeken als onderdeel van een Spock test:

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

4. Zoek operator

De laatste Groovy-operator in de context van patroonvergelijking is de zoekoperator ~=. In dit geval zal de operator direct een java.util.regex.Matcher voorbeeld.

Hier kunnen we naar handelen Matcher bijvoorbeeld door toegang te krijgen tot de bekende Java API-methoden. Maar daarnaast hebben we ook toegang tot gematchte groepen met behulp van een multidimensionale array.

En dat is niet alles - de Matcher instantie zal automatisch dwingen tot een boolean typ door zijn vind() methode indien gebruikt als predikaat. Als we de officiële Groovy-documenten citeren, betekent dit dat "de operator = ~ consistent is met het eenvoudige gebruik van de operator = ~ van Perl".

Hier zien we de operator in actie:

def "zoek operator voorbeeld" () {wanneer: "gebruikmakend van de zoek operator" def matcher = 'foo en bar, baz en buz' = ~ / (\ w +) en (\ w +) / dan: "vindt groepen" matcher .size () == 2 en: "heeft toegang tot groepen met array" matcher [0] [0] == 'foo and bar' matcher [1] [2] == 'buz' en: "je kunt het gebruiken als een predikaat "'foobarbaz' = ~ / bar /}

5. Conclusie

We hebben gezien hoe de Groovy-taal ons op een zeer gemakkelijke manier toegang geeft tot de ingebouwde Java-functies met betrekking tot reguliere expressies.

De officiële Groovy-documentatie bevat ook enkele beknopte voorbeelden met betrekking tot dit onderwerp. Het is vooral cool als je bedenkt dat de codevoorbeelden in de documenten worden uitgevoerd als onderdeel van de documentatieopbouw.

Zoals altijd zijn codevoorbeelden te vinden op GitHub.


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