Mintaillesztés húrokban Groovy-ban

1. Áttekintés

Ebben a cikkben megvizsgáljuk a Groovy nyelvi jellemzőit a karakterláncok mintaillesztéséhez.

Meglátjuk, hogy a Groovy akkumulátorral ellátott megközelítése hogyan nyújt számunkra erőteljes és ergonómikus szintaxist az alapvető mintaillesztési igényeinkhez.

2. Minta operátor

A Groovy nyelv bemutatja az úgynevezett minta operátort ~. Ez az operátor szintaktikus cukorparancsnak tekinthető a Java-ra java.util.regex.Pattern.compile (string) módszer.

Nézzük meg a gyakorlatban az a részeként Spock teszt:

def "minta operátor példa" () {adott: "egy minta" def p = ~ '' foo 'várható: p instanceof Pattern és: "perjeles karakterláncokat használhat, hogy elkerülje a fekete perjel elkerülését" def digitPattern = ~ / \ d * / digitPattern.matcher ('4711'). egyezik ()}

Ez is nagyon kényelmes, de látni fogjuk, hogy ez az operátor csupán néhány más, még hasznosabb operátor alapja.

3. Match Operator

Legtöbbször, főleg tesztek írásakor, nem igazán vagyunk érdekeltek az alkotásban Minta objektumokat, de ehelyett ellenőrizni szeretné, hogy a Húr illeszkedik egy bizonyos reguláris kifejezéshez (vagy Minta). A Groovy tehát magában foglalja a mérkőzés operátorát is ==~.

Visszaadja a logikai és szigorú mérkőzést hajt végre a megadott reguláris kifejezéssel szemben. Alapvetően ez egy szintaktikus parancsikon a híváshoz Pattern.matches (regex, string).

Ismét megvizsgáljuk a gyakorlatban az a részeként Spock teszt:

def "match operator example" () {várható: 'foobar' == ~ /.*oba.*/ és: "az egyezés szigorú"!

4. Keresse meg az Operátort

Az utolsó Groovy operátor a mintaillesztés összefüggésében a keresés operátor ~=. Ebben az esetben az operátor közvetlenül létrehozza és visszaadja a java.util.regex.Matcher példa.

Ennek alapján cselekedhetünk Matcher például azáltal, hogy hozzáfér az ismert Java API-metódusaihoz. De emellett egyeztetett csoportokhoz is hozzáférhetünk többdimenziós tömb segítségével.

És ez még nem minden - a Matcher példány automatikusan kényszeríteni a logikai írja be annak hívásával megtalálja() módszer, ha predikátumként használják. A hivatalos Groovy-dokumentumokat idézve ez azt jelenti, hogy „az = ~ operátor összhangban van a Perl = ~ operátor egyszerű használatával”.

Itt látjuk az operátort működés közben:

def "keresés operátor példa" () {mikor: "a keresési operátor használata" def matcher = 'foo and bar, baz and buz' = ~ / (\ w +) és (\ w +) / then: "csoportokat fog találni" matcher .size () == 2 és: "tömböt használhat a csoportokhoz" matcher [0] [0] == 'foo and bar' matcher [1] [2] == 'buz' és: "használhatja predikátum "'foobarbaz' = ~ / bar /}

5. Következtetés

Láttuk, hogy a Groovy nyelv hogyan kínál számunkra nagyon kényelmes módon hozzáférést a reguláris kifejezésekkel kapcsolatos beépített Java-szolgáltatásokhoz.

A hivatalos Groovy dokumentáció tartalmaz néhány tömör példát is ezzel a témával kapcsolatban. Különösen jó, ha figyelembe vesszük, hogy a doc-okban szereplő kód példák a dokumentáció összeállításának részeként kerülnek végrehajtásra.

Mint mindig, a GitHubon is megtalálhatók kódpéldák.