Java Academy · leksjon

Kompilere mønstre

Pattern.compile og Matcher

Leksjon 1 av 413 trinn

Kompilere mønstre er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Paret Pattern og Matcher

Java-regex finnes i java.util.regex. En Pattern er et kompilert regulært uttrykk, mens en Matcher bruker dette mønsteret på en bestemt inndata.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher("abc123");
        System.out.println(m.find());
    }
}

Kompiler én gang, gjenbruk ofte

Pattern.compile er relativt kostnadskrevende. Kompiler et mønster én gang, og gjenbruk det for mange inndata i stedet for å kompilere det på nytt i en løkke.

import java.util.regex.Pattern;

public class Main {
    static final Pattern DIGITS = Pattern.compile("\\d+");

    public static void main(String[] args) {
        System.out.println(DIGITS.matcher("a1").find());
        System.out.println(DIGITS.matcher("bb").find());
    }
}

Escaping av backslash-tegn i Java

Regex-token som \d trenger en backslash, men Java-strenger bruker også backslash for escape-sekvenser. Derfor skriver du \\d i kildekoden for å angi regex-en \d.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern word = Pattern.compile("\\w+");
        System.out.println(word.matcher("hello").matches());
    }
}

Opprette en Matcher

pattern.matcher(input) binder mønsteret til en inndatastreng og returnerer en ny Matcher som holder rede på posisjonen.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("cat");
        Matcher m = p.matcher("the cat sat");
        System.out.println(m.find());
    }
}

Matchers har tilstand

En Matcher har muterbar tilstand (gjeldende posisjon, siste treff). Opprett en ny matcher for hver inndata; del ikke én mellom tråder.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\d");
        Matcher m = p.matcher("a1b2");
        System.out.println(m.find());
        System.out.println(m.find());
    }
}

Flagg for store og små bokstaver

Send flagg som det andre argumentet til compile. Pattern.CASE_INSENSITIVE ignorerer forskjellen på store og små bokstaver.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        System.out.println(p.matcher("I love JAVA").find());
    }
}

Kombinere flagg

Kombiner flagg med den bitvise OR-operatoren. Her legger vi til MULTILINE, slik at forankringer matcher på hver linje.

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("^a", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
        Matcher m = p.matcher("apple\nApricot");
        int count = 0;
        while (m.find()) count++;
        System.out.println(count);
    }
}

Den statiske matches-snarveien

Pattern.matches(regex, input) er en hjelpemetode for engangsbruk som kompilerer og tester i ett kall. Praktisk, men mønsteret kompileres på nytt hver gang.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        System.out.println(Pattern.matches("\\d{3}", "123"));
        System.out.println(Pattern.matches("\\d{3}", "12"));
    }
}

Dele opp med en Pattern

En kompilert Pattern kan dele opp strenger via split, slik at det samme kompilerte regex-uttrykket gjenbrukes effektivt.

import java.util.Arrays;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern comma = Pattern.compile("\\s*,\\s*");
        String[] parts = comma.split("a, b ,c,  d");
        System.out.println(Arrays.toString(parts));
    }
}

Undersøke Pattern

pattern() returnerer den opprinnelige regex-strengen, og flags() returnerer de aktive flaggene som en int.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);
        System.out.println(p.pattern());
        System.out.println(p.flags());
    }
}

Ugyldige mønstre utløser unntak

Et ugyldig regex-uttrykk utløser PatternSyntaxException ved compile-tidspunktet, slik at du kan fange opp feil tidlig.

import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class Main {
    public static void main(String[] args) {
        try {
            Pattern.compile("[unclosed");
        } catch (PatternSyntaxException e) {
            System.out.println("Invalid regex");
        }
    }
}

Hurtigsjekk

Hvorfor bør du kompilere et regex-uttrykk som brukes ofte, til et statisk Pattern-felt?

Oppsummering

Du har kompilert mønstre:

  • Pattern.compile bygger et gjenbrukbart, uforanderlig og trådsikkert mønster; matcher binder det til en inndata.
  • Escape regex-backslash-tegn som \\ i Java-kildekode.
  • Flagg som CASE_INSENSITIVE og MULTILINE kombineres med bitvis OR.
  • Matcher har tilstand, så opprett én per inndata.
Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Kompilere mønstre» gratis?

Ja – hele teksten i «Kompilere mønstre» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Kompilere mønstre»?

Pattern.compile og Matcher Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Kompilere mønstre»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Kompilere mønstre
  2. Finne og matche
  3. Fangstgrupper
  4. Erstatte med regex
← Tilbake til Java Academy