Java Academy · Lektion

Kompilering af patterns

Pattern.compile og Matcher

Lektion 1 af 413 trin

Kompilering af patterns er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.

Parret Pattern og Matcher

Java-regulære udtryk findes i java.util.regex. En Pattern er et kompileret regulært udtryk, mens en Matcher anvender mønsteret på bestemte inddata.

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());
    }
}

Kompilér én gang, genbrug ofte

Pattern.compile er relativt dyrt. Kompilér et mønster én gang, og genbrug det med mange input i stedet for at kompilere det igen 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 af omvendte skråstreger i Java

Regex-tokens som \d kræver en omvendt skråstreg, men Java-strenge bruger også omvendte skråstreger til escape-sekvenser. Derfor skriver du \\d i kildekoden for at angive regexen \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());
    }
}

Oprettelse af en Matcher

pattern.matcher(input) knytter mønsteret til en inputstreng og returnerer en ny Matcher, der holder styr på positionen.

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());
    }
}

Matcher-objekter har tilstand

En Matcher indeholder foranderlig tilstand (den aktuelle position og det seneste match). Opret en ny matcher for hvert input, og del ikke én mellem tråde.

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());
    }
}

Flag uden forskel på store og små bogstaver

Giv flag som det andet argument til compile. Pattern.CASE_INSENSITIVE ignorerer forskellen på store og små bogstaver.

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());
    }
}

Kombination af flag

Kombinér flag med den bitvise OR-operator. Her tilføjer vi MULTILINE, så ankrene 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 genvej matches

Pattern.matches(regex, input) er en hjælpefunktion til engangsbrug, der kompilerer og tester i ét kald. Den er praktisk, men kompilerer mønsteret igen 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"));
    }
}

Opdeling med et Pattern

Et kompileret Pattern kan opdele strenge via split og genbruge den samme kompilerede regex 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øgelse af mønsteret

pattern() returnerer den oprindelige regexstreng, og flags() returnerer de aktive flag 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 udløser fejl

En forkert formateret regex udløser PatternSyntaxException under compile, så du kan opdage fejl tidligt.

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");
        }
    }
}

Hurtigt tjek

Hvorfor bør du kompilere en hyppigt brugt regex til et statisk Pattern-felt?

Opsummering

Du kompilerede mønstre:

  • Pattern.compile opbygger et genanvendeligt, uforanderligt og trådsikkert mønster; matcher knytter det til et input.
  • Escap regexens omvendte skråstreger som \\ i Java-kildekode.
  • Flag som CASE_INSENSITIVE og MULTILINE kombineres med bitvis OR.
  • Matcher har tilstand, så opret én for hvert input.
Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “Kompilering af patterns” gratis?

Ja — hele teksten til “Kompilering af patterns” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Kompilering af patterns”?

Pattern.compile og Matcher Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Kompilering af patterns”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Kompilering af patterns
  2. Søgning og matching
  3. Capture-grupper
  4. Erstatning med regex
← Tilbage til Java Academy