Zodpovedajúce vzory v reťazcoch v Groovy

1. Prehľad

V tomto článku sa pozrieme na funkcie jazyka Groovy pre porovnávanie vzorov v reťazcoch.

Uvidíme, ako nám prístup Groovyho pomocou batérií poskytne výkonnú a ergonomickú syntax pre naše základné potreby priraďovania vzorov.

2. Operátor vzoru

Jazyk Groovy zavádza takzvaný vzorový operátor ~. Tento operátor sa dá považovať za syntaktickú skratku cukru do Javy java.util.regex.Pattern.compile (reťazec) metóda.

Pozrime sa na to v praxi ako súčasť a Spock test:

def "vzorový operátor vzoru" () {zadané: "a pattern" def p = ~ 'foo' očakávať: p instanceof Pattern a: "môžete použiť rozbité reťazce, aby ste sa vyhli úniku čiernej lomky" def digitPattern = ~ / \ d * / digitPattern.matcher ('4711'). shod ()}

To je tiež celkom pohodlné, ale uvidíme, že tento operátor je iba základnou čiarou pre niektoré ďalšie, ešte užitočnejšie operátory.

3. Operátor zápasu

Väčšinou, hlavne pri písaní testov, nemáme skutočný záujem o tvorbu Vzor objekty, ale namiesto toho chcete skontrolovať, či a String sa zhoduje s určitým regulárnym výrazom (alebo Vzor). Groovy preto obsahuje aj operátor zhody ==~.

Vracia a boolovský a vykoná prísnu zhodu so zadaným regulárnym výrazom. V zásade je to syntaktická skratka pre volanie Pattern.matches (regex, string).

Opäť sa na to v praxi pozrieme ako na súčasť a Spock test:

def "príklad operátora zhody" () {expect: 'foobar' == ~ /.*oba.*/ a: "párovanie je prísne"! ('foobar' == ~ / foo /)}

4. Nájdite operátora

Posledným operátorom Groovy v kontexte porovnávania vzorov je operátor find ~=. V takom prípade operátor priamo vytvorí a vráti a java.util.regex.Matcher inštancia.

Môžeme na základe toho konať Matcher napríklad prístupom k jeho známym metódam Java API. Ale okrem toho sme tiež schopní získať prístup k párovaným skupinám pomocou viacrozmerného poľa.

A to nie je všetko - Matcher inštancia sa automaticky donúti a boolovský zadajte volaním jeho Nájsť() metóda, ak sa použije ako predikát. Citujúc oficiálne dokumenty Groovy, znamená to, že „operátor = ~ je v súlade s jednoduchým použitím operátora Perl’s = ~“.

Tu vidíme operátora v akcii:

def "find operator example" () {when: "using the find operator" def matcher = 'foo and bar, baz and buz' = ~ / (\ w +) and (\ w +) / then: "will find groups" matcher .size () == 2 a: „môže pristupovať k skupinám pomocou poľa“ porovnávač [0] [0] == porovnávač „foo and bar“ [1] [2] == „buz“ a: „môžete ho použiť ako predikát "'foobarbaz' = ~ / bar /}

5. Záver

Videli sme, ako nám jazyk Groovy umožňuje veľmi pohodlným spôsobom prístup k vstavaným funkciám Java, ktoré sa týkajú regulárnych výrazov.

Oficiálna dokumentácia Groovy obsahuje aj niekoľko výstižných príkladov týkajúcich sa tejto témy. Je obzvlášť fajn, ak si myslíte, že príklady kódov v dokumentoch sa vykonávajú ako súčasť zostavenia dokumentácie.

Ako vždy, príklady kódov možno nájsť na GitHub.


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