Kompilering af patterns
Pattern.compile og Matcher
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.compileopbygger et genanvendeligt, uforanderligt og trådsikkert mønster;matcherknytter det til et input.- Escap regexens omvendte skråstreger som
\\i Java-kildekode. - Flag som
CASE_INSENSITIVEogMULTILINEkombineres med bitvis OR. Matcherhar tilstand, så opret én for hvert input.
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
- Kompilering af patterns
- Søgning og matching
- Capture-grupper
- Erstatning med regex