Kompilere mønstre
Pattern.compile og Matcher
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.compilebygger et gjenbrukbart, uforanderlig og trådsikkert mønster;matcherbinder det til en inndata.- Escape regex-backslash-tegn som
\\i Java-kildekode. - Flagg som
CASE_INSENSITIVEogMULTILINEkombineres med bitvis OR. Matcherhar tilstand, så opprett én per inndata.
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
- Kompilere mønstre
- Finne og matche
- Fangstgrupper
- Erstatte med regex