Java >> Java-zelfstudie >  >> Java

Java Pattern Matching en reguliere expressies

In dit artikel bespreken we reguliere expressies en patroonherkenning in java.

Reguliere uitdrukkingen


Reguliere expressie is een tekenreeks die een tekenreeks beschrijft.

Regels voor reguliere expressies

Een reguliere expressie kan normale tekens, tekenklassen (sets van tekens) en kwantoren bevatten.

Normale tekens

– Normale karakters komen overeen zoals ze zijn. Een patroon "Java" komt bijvoorbeeld alleen overeen met de invoerreeks "Java".

– Wildcard punt(.) komt overeen met elk teken. bijv. het patroon "." rekentekens "A", "a" enz.

Tekenklassen


– Een tekenklasse komt overeen met elk teken in de set. bijv. [ABCD] komt overeen met A, B, C of D.

- Omgekeerde set komt overeen met elk teken behalve tekens in de set. bijv. [^ABCD] komt overeen met elk ander teken dan A, B, C of D.

– Een bereik kan worden opgegeven met een koppelteken (-). bijv. [1-9] komt overeen met cijfers van 1 tot 9

Kwantificatoren


Kwantificatoren bepalen hoe vaak een uitdrukking wordt gevonden.

+ quantifier komt overeen met een of meer tekens.

* kwantor komt overeen met nul of meer tekens.

? quantifier komt overeen met nul of één teken.

Patroonovereenkomst in Java


In Java ondersteunen de volgende klassen de verwerking van reguliere expressies:

Patroon

Matcher

Patroon


Het definieert een reguliere expressie.

Patroonklasse heeft geen constructors. In plaats daarvan wordt een patroon gemaakt door de fabrieksmethode compile() aan te roepen:


Pattern pattern = Pattern.compile("Java");

Overeenkomst


Matcher wordt gebruikt om het patroon te matchen met een andere reeks.

Matcher-klasse heeft geen constructors. In plaats daarvan wordt een Matcher gemaakt met behulp van de matcher()-fabrieksmethode die is gedefinieerd in de klasse Pattern.


Matcher matcher = pattern.matcher("TopJavaTutorial");

Methoden voor het matchen van patronen

booleaanse overeenkomsten()

Het geeft true terug als de hele reeks overeenkomt met het patroon, en anders false.

    Pattern pattern = Pattern.compile("Java");
    Matcher matcher = pattern.matcher("TopJavaTutorial");
    
    System.out.println(matcher.matches());
    


Uitgang :

false

booleaanse vondst()


Het retourneert waar als de reeks een overeenkomende deelreeks voor het patroon bevat, en anders onwaar.

    Pattern pattern = Pattern.compile("Java");
    Matcher matcher = pattern.matcher("TopJavaTutorial");
    
    System.out.println(matcher.find());


Uitgang :

waar

Tekenreeksgroep()


Deze methode kan worden gebruikt om een ​​string te verkrijgen die de laatste overeenkomende reeks bevat.

start() en einde()


start() retourneert de index van de huidige overeenkomst in de reeks.

end() retourneert de index van het teken na de huidige overeenkomst.

    Pattern pattern = Pattern.compile("T");
    Matcher matcher = pattern.matcher("TopJavaTutorial");
    
    while(matcher.find()){
      System.out.println("T found at index " + matcher.start());
    }


Uitgang :

T gevonden bij index 0
T gevonden bij index 7

String ReplaceAll()


Deze methode kan worden gebruikt om alle exemplaren van een overeenkomende reeks te vervangen door een andere reeks.

Patroonovereenkomst met jokertekens en kwantoren


Zoals besproken, kunnen we de volgende kwantoren gebruiken:

+ quantifier komt overeen met een of meer tekens.

* kwantor komt overeen met nul of meer tekens.

? quantifier komt overeen met nul of één teken.


Als we een patroon proberen te vinden met herhalingen van een teken zoals "A", kunnen we het patroon schrijven als "A+"

Laten we een voorbeeld bekijken:

    Pattern pattern = Pattern.compile("A+");
    Matcher matcher = pattern.matcher("AA AAA A");
    
    while(matcher.find()){
      System.out.println(matcher.group());
    }


Uitgang :

AA
AAA
A


Evenzo, als we op zoek zijn naar herhaling van tekens, kunnen we een combinatie van gebruiken. en + zo :

    Pattern pattern = Pattern.compile("t.+?a");
    Matcher matcher = pattern.matcher("topjavatutorial");
    
    while(matcher.find()){
      System.out.println(matcher.group());
    }


Uitgang :

topja
zelfstudie

Patroonovereenkomst met tekensets


We kunnen tekensets en reeksen gebruiken om elke reeks letters te matchen.

Het volgende patroon komt bijvoorbeeld overeen met kleine letters:

    Pattern pattern = Pattern.compile("[a-z]+");
    Matcher matcher = pattern.matcher("top java tutorial");
    
    while(matcher.find()){
      System.out.println(matcher.group());
    }


Uitgang :

top
java
tutorial

Op dezelfde manier, als we moeten matchen voor zowel kleine letters als hoofdletters, kunnen we het patroon gebruiken:

“[a-zA-z]+”

Voorbeeld :

    Pattern pattern = Pattern.compile("[a-zA-z]+");
    Matcher matcher = pattern.matcher("Top Java Tutorial");
    
    while(matcher.find()){
      System.out.println(matcher.group());
    }


Uitgang :

Boven
Java
Zelfstudie

Misschien vind je lezen ook leuk

Java 8 nieuwe functies

Top 10 lastige Java-puzzels

Top 10 sollicitatievragen over recursiecodering

Top Java-zelfstudieartikelen:maart 2016



Java-tag