Latest web development tutorials

Java reguläre Ausdrücke

Regulärer Ausdruck definiert die Musterkette.

Reguläre Ausdrücke können zur Suche verwendet werden, zu bearbeiten, oder die Bearbeitung von Text.

Reguläre Ausdrücke werden auf eine bestimmte Sprache beschränkt, sondern es gibt subtile Unterschiede in jeder Sprache.

Java reguläre Ausdrücke und Perl ist das ähnlich.

java.util.regex Paket umfasst die folgenden drei Kategorien:

  • Muster Kategorien:

    Objekt Muster ist ein regulärer Ausdruck Compiler Darstellung. Pattern-Klasse hat keinen öffentlichen Konstruktor. Um ein Pattern-Objekt erstellen, müssen Sie zuerst seine öffentliche statische Kompilierung Methode aufrufen, die ein Pattern-Objekt zurückgibt. Diese Methode nimmt einen regulären Ausdruck als erstes Argument.

  • Matcher Kategorien:

    Matcher Aufgabe ist die Interpretation des Eingabestrings und passenden Betrieb des Verbrennungsmotors. Wie die Pattern-Klasse, hat Matcher keinen öffentlichen Konstruktor. Sie müssen die Methode Pattern Matcher Objekt aufrufen ein Matcher-Objekt zu erhalten.

  • Pattern:

    Pattern ist eine nicht-obligatorischen Ausnahmeklasse, die einem regulären Ausdruck Syntaxfehler darstellt.


Capture-Gruppe

Erfassen von Gruppen sind mehrere Zeichen, wenn eine einzelne Einheit Behandlungsmethoden, durch die Zeichen in Klammern gruppiert zu erstellen.

Beispielsweise erstellt der reguläre Ausdruck (Hund) eine einzige Gruppe, die Gruppe, die "d", "o" und "g" enthält.

Capture-Gruppe, die durch ihre offene Klammer von links nach rechts durchnummeriert zu berechnen. Beispielsweise in dem Ausdruck ((A) (B (C))), gibt es vier solche Gruppen:

  • ((A) (B (C)))
  • (A)
  • (B (C))
  • (C)

Durch den Aufruf der Matcher-Objekt Groupcount Art und Weise, wie viele Pakete Ausdruck zu sehen. Groupcount-Methode gibt einen int, die die Matcher-Objekt derzeit mehrere Capture-Gruppen hat.

Es gibt eine spezielle Gruppe (Gruppe 0), ist es immer den gesamten Ausdruck darstellt. Die Gruppe ist nicht in Groupcount Rückgabewert enthalten.

Beispiele

Das folgende Beispiel zeigt, wie eine Reihe von Zahlen aus einer bestimmten Zeichenfolge zu finden:

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

public class RegexMatches
{
    public static void main( String args[] ){

      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);

      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

Die obigen Beispiele kompilierten Ergebnisse sind wie folgt:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

Syntax für reguläre Ausdrücke

Charakter

Erklärung

\

Das nächste Zeichen wird als Sonderzeichen, Text markiert, zurück Verweise oder Oktal Flucht. Zum Beispiel: "n" entspricht dem Zeichen "n". "\ N" entspricht einem Newline-Zeichen. Sequence "\\" matches "\", "\ (" Match "(".

^

Wer passt zu der Eingabestring beginnt. Wenn legen Sie die Position Objekt passendeMultiline - Eigenschaft RegExpund auch ^ "\ n" oder "\ r" nach.

$

Passen Sie die Eingangsende der Saitenlage. Wenn dasmehrzeilige Eigenschaft des RegExp- Objekt, $ treffer auch mit dem "\ n" oder "\ r" Position vor.

*

Null oder mehrere Male entspricht dem vorhergehenden Zeichen oder Unterausdruck. Zum Beispiel zo * entspricht "z" und "Zoo". * Entspricht {0,}.

+

Ein oder mehrere Male entspricht dem vorhergehenden Zeichen oder Unterausdruck. Zum Beispiel: "zo +" und "zo" und "Zoo" Spiel, aber die "z" passen nicht zusammen. + Entspricht {1}.

?

Null oder Eins entspricht dem vorhergehenden Zeichen oder Unterausdruck. Zum Beispiel, "tun (es)?" Am besten für die "do" oder "bedeutet" in den "do". ? Entspricht {0,1}.

{N}

nnicht negative ganze Zahl. Wer passt genaun- mal. Zum Beispiel: "o {2}" und "Bob" in der "o" nicht übereinstimmt, aber die "Nahrung" der beiden "o" Spiel.

{N,}

nnicht negative ganze Zahl. Mindestensn- mal. Zum Beispiel, "o {2,}" entspricht nicht dem "Bob" in der "o" und match "foooood" alles o. "O {1,}" ist gleichbedeutend mit "o +". "O {0,}" ist gleichbedeutend mit "o *".

{N,m}

Mund eine nicht negative ganze Zahln,wobein<= m. Mindestensn undhöchstensm- mal. Zum Beispiel: "o {1,3}" entspricht "fooooood" in den ersten drei o. 'O {0,1}' entspricht 'o?'. Hinweis: Sie können nicht einfügen Leerzeichen zwischen Kommas und Zahlen.

?

Wenn die Zeichen in jedem anderen Qualifier gefolgt (*, +,?, { N}, {n,}, {n, m}) später ist das Anpassungsmuster "nicht gierig." "Genügsam" Muster für mögliche kurze Zeichenfolge zu suchen passend, und die Standard "gierig" Pattern-Matching für mögliche lange Zeichenfolge zu suchen. Zum Beispiel in der Zeichenfolge "oooo" in "o +?" Am besten nur eine einzige "o" und "o +" Spiel "o".

.

Entspricht einem einzelnen Zeichen außer "\ r \ n". Passend "\ r \ n" enthalten, einschließlich eines der Zeichen, wie die Verwendung Muster "[\ s \ S]" oder dergleichen.

(Pattern)

PatternMatching und Capture subexpression des Spiels. Sie können die$ 0 ... $ 9 Objekte Ergebnisse entsprechen verwenden von "matching" Sammlung erfasst zurückzuholen.Passend Klammern Zeichen (), verwenden Sie "\ (" oder "\)."

(?:Muster)

PassendeMusteraber nicht das Spiel subexpression nicht erfassen, es ist eine nicht-Capturing übereinstimmen, wird Anpassung für die spätere Verwendung gespeichert. Dies ist für den Einsatz "oder" Zeichen (|), wenn die Kombinationsmodus Komponenten nützlich. Zum Beispiel: 'Industr (?: Y | n) ist ein Verhältnis von "Industrie | Branchen' wirtschaftlicher Ausdruck.

(?= Pattern)

Durchführen von Vorwärts - Vorhersage subexpression erste SuchbegriffMusterpassende String am Startpunkt des Ausdrucks Matching. Es ist ein nicht-Capturing Spiel, das nicht, das Spiel für die spätere Verwendung nicht erfassen. Zum Beispiel: 'Fenster (= 95 |? 98 | NT | 2000) "Matching" Windows 2000 "" Windows ", aber nicht mit dem" Windows 3.1 "in der" Windows ". Lookahead nicht Charakter nehmen ist, nachdem eine Übereinstimmung auftritt, das nächste Spiel für Ihre Suche unmittelbar nach dem letzten Spiel, nicht nach der ersten Prognose in der Zusammensetzung von Zeichen.

(?!Pattern)

Look - Ahead - Subexpression eine Rückwärtssuche durchführen, wird der Ausdruck nicht die ZeichenfolgeMusterin der Ausgangspunkt der Suchbegriff passende entsprechen. Es ist ein nicht-Capturing Spiel, das nicht, das Spiel für die spätere Verwendung nicht erfassen. Zum Beispiel: 'Fenster (95 | ?! 98 | NT | 2000) "entspricht dem" Windows 3.1 "in der" Windows ", sondern das" Windows 2000 "" Windows "stimmt nicht überein. Lookahead nicht Charakter nehmen ist, nachdem eine Übereinstimmung auftritt, das nächste Spiel für Ihre Suche unmittelbar nach dem letzten Spiel, nicht nach der ersten Prognose in der Zusammensetzung von Zeichen.

x|y

Spielxodery.Zum Beispiel: 'z | Lebensmittel "entspricht" z "oder" Nahrung ". '(Z | f) OOD "match" Zood "oder" Nahrung ".

[Xyz]

Zeichensatz. Jedes Zeichen enthalten. Zum Beispiel: "[abc]" passt "plain" in der "a".

[^Xyz]

Reverse-Zeichensatz. Jedes Zeichen nicht enthalten. Zum Beispiel: "[^ abc]" passt "plain" in der "p", "l", "i", "n".

[Az]

Bereich von Zeichen. Entspricht einem beliebigen Zeichen innerhalb des angegebenen Bereichs. Zum Beispiel: "[az]" Matches "a" auf alle Kleinbuchstaben in der "z" Bereich.

[^Az]

Reverse-Bereich von Zeichen. Entspricht einem beliebigen Zeichen nicht innerhalb des angegebenen Bereichs. Zum Beispiel: "[^ az]" stimmt mit einer nicht "a" zu einem der Charaktere in der "z" Bereich.

\ B

Spiele eine Wortgrenze, die die Position des Wortes und die Räume zwischen ist. Zum Beispiel, "er \ b" passt "nie" in "er", sondern das "Verb" in "er" stimmt nicht überein.

\ B

Nicht-Wortgrenze. "Er \ B" entspricht dem "Verb" in "er", aber "nie" in "er" stimmt nicht überein.

\C x

Spiel Steuerzeichen durchx angegeben.Beispiel: \ cM entspricht Control-M oder Wagenrücklauf.DerWert vonxmuss zwischen AZ oder az sein. Wenn nicht, wird angenommen, dass c "c" Zeichen selbst.

\ D

Passende numerische Zeichen. Entspricht [0-9].

\ D

Nicht-numerische Zeichen. Es ist äquivalent zu [^ 0-9].

\ F

Formfeed Spiel. Entspricht \ x0c und \ Sel.

\ N

Wer passt eine neue Zeile. Entspricht \ x0a und \ cJ.

\ R

Spiele einen Wagenrücklauf. Equivalent x0d und \ cM auf \.

\ S

Spiele keine Leerzeichen, einschließlich Leerzeichen, Tabulatoren, Seitenumbrüche usw. Entspricht [\ f \ n \ r \ t \ v].

\ S

Spiele alle nicht Leerzeichen. Entspricht [^ \ f \ n \ r \ t \ v].

\ T

Spiel-Registerkarte. Und \ x09 und gleichwertige \ cI.

\ V

Spiele eine vertikale Tabulatorzeichen. Und \ X0B und \ cK gleichwertig.

\ W

Entspricht einem beliebigen Zeichen-Klassencharakter, einschließlich Unterstrich. Und "[A-Za-z0-9_]" äquivalent.

\ W

Stimmt mit jedem nicht-Wort-Zeichen. Und "[^ A-Za-z0-9_]" äquivalent.

\X n

Spieln,n ist hier eine hexadezimale Escape - Codes. Hexadezimale Escape-Code muss genau zwei Ziffern lang sein. Zum Beispiel: "\ x41" matching "A". "\ X041" und "\ x04" und "1" sind gleichwertig. Ermöglicht die Verwendung von regulären Ausdrücken ASCII-Code.

\Num

Spielnumnum hier eine positive ganze Zahl. Zur Erfassung von Rückreferenzierungen entsprechen. Zum Beispiel: "(.) \ 1" zwei aufeinander folgenden identischen Zeichen.

\N

Identifiziert ein Oktal-Escape-Code oder Back-Referenzen. Wenn \nvon mindestensnerfassten Teilausdrücke voraus, dann istnein Rückreferenzierung. Andernfalls, wennneine Oktalzahl (0-7), dannnein oktaler Escape - Codes.

\Nm

Identifiziert ein Oktal-Escape-Code oder Back-Referenzen. Wenn \nmvor mindestensnmcapture subexpression, dannnmist ein Rückreferenzierung. Wenn \nmmindestens vorncapture,neine Rückreferenzierung, durch das Zeichenm folgt.Wenn die beiden früheren Fällen nicht vorhanden sind,\nm entspricht Oktalwertnm,wobeinundmsind Oktalziffern (0-7).

\ Nml

Wennneine Oktalzahl(0-3) ist,m undlsind Oktal (0-7), passt es Oktal - Escape - Codesnml.

\U n

Entsprichtn,wobeineine Unicode - Zeichen durch vier hexadezimale Zahlen dargestellt. Entspricht beispielsweise \ u00A9 das Copyright-Symbol (©).

Matcher Klassenmethoden

Index-Methode

Index Methoden liefern nützliche Indexwerte genau angeben, wo die Eingabezeichenfolge Übereinstimmungen zu finden:

Nein . Verfahren und Beschreibung
1 public int start ()
Gibt den Anfangs-Index der vorherigen Spiel.
2 public int start (int - Gruppe)
Zurück in Betrieb während der vorherigen Spiel, von einer bestimmten Gruppe von Untersequenz anfänglichen Index erfasst
3 public int end ()
Gibt den Offset nach dem letzten Zeichen abgestimmt.
4 public int Ende (int - Gruppe)
Zurück in Betrieb während der vorherigen Spiel, durch eine nach der letzten Gruppe von Zeichen nach der Abfolge von Erfassungs angegebenen Offset.

Forschungsmethoden

Methoden verwendet, um die Eingabezeichenfolge zu überprüfen und gibt einen Booleschen Wert, der angibt, ob das Muster gefunden wird:

Nein . Verfahren und Beschreibung
1 public boolean lookingAt ()
Versuchen, den Bereich vom Beginn der Beginn der Eingabesequenz das Muster übereinstimmt.
2 public boolean find ()
Versuchen Sie, die Eingabesequenz zu finden, der das Muster der nächsten Sequenz übereinstimmt.
3 public boolean find (int start)
Setzt diese Matcher und dann versucht, eine Übereinstimmung für das Muster zu finden, geben Sie die nächste Teilsequenz aus dem angegebenen Index begonnen wird.
4 public boolean matches ()
Versuchen Sie, die gesamte Region und Pattern-Matching.

Ersatzverfahren

Alternative ist eine Zeichenfolge in das Texteingabemethode zu ersetzen:

Nein . Verfahren und Beschreibung
1 public Matcher appendReplacement (String sb, String - Ersatz)
Um das zu erreichen nicht-terminale Additionen und Substitutionen Schritt.
2 public String appendTail (String sb)
Erreichen Sie terminale Additionen und Substitutionen Schritt.
3 public String replaceAll (String - Ersatz)
Ersetzen-Modus mit dem angegebenen Ersatz-String für jede Sequenz die Eingangssequenz zu entsprechen.
4 public String replaceFirst (String - Ersatz)
Ersetzen-Modus mit dem angegebenen Ersetzungsstring die Eingangssequenz des ersten Teilsequenz entsprechen.
5 public static String quoteReplacement (String s)
Gibt eine Stringliteral Ersatz-String. Diese Methode gibt eine Zeichenfolge, die als Methode appendReplacement Matcher Klasse Arbeit als Literalzeichenfolge geben wird.

Beginn und Ende Methode

Hier ist ein Beispiel für die Anzahl von Vorkommen in der Eingabezeichenfolge zum Zählen das Wort "Katze" erscheint:

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

public class RegexMatches
{
    private static final String REGEX = "\\bcat\\b";
    private static final String INPUT =
                                    "cat cat cat cattie cat";

    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // 获取 matcher 对象
       int count = 0;

       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

Die obigen Beispiele kompilierten Ergebnisse sind wie folgt:

Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22

Dies kann am Beispiel Wortgrenzen zu sehen ist, um sicherzustellen, dass der Buchstabe "c" "a" "t" ist nicht nur ein langes Wort Strings. Es bietet auch einige nützliche Informationen über die eingegebene Zeichenkette Positionen abgestimmt.

Start-Methode gibt den Betrieb während des vorherigen Spiel von der ersten Gruppe erfasst Teilfolge Index gegeben, die Methode der Anpassung des letzten Index plus ein Zeichen enden.

Streichhölzer und lookingAt Verfahren

sind Spiele und lookingAt Methoden verwendet, um zu versuchen eine Folge von Eingabemuster entsprechen. Sie unterscheiden sich von den Anforderungen der gesamten Sequenz matcher Spiel, aber lookingAt nicht erforderlich.

Diese beiden Verfahren werden häufig verwendet, in der Eingabezeichenfolge beginnt.

Durch das folgende Beispiel diese Funktion zu erklären:

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

public class RegexMatches
{
    private static final String REGEX = "foo";
    private static final String INPUT = "fooooooooooooooooo";
    private static Pattern pattern;
    private static Matcher matcher;

    public static void main( String args[] ){
       pattern = Pattern.compile(REGEX);
       matcher = pattern.matcher(INPUT);

       System.out.println("Current REGEX is: "+REGEX);
       System.out.println("Current INPUT is: "+INPUT);

       System.out.println("lookingAt(): "+matcher.lookingAt());
       System.out.println("matches(): "+matcher.matches());
   }
}

Die obigen Beispiele kompilierten Ergebnisse sind wie folgt:

Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false

replaceFirst Methoden und replaceAll

replaceFirst und replaceAll Methode verwendet, um Text Anpassung regulären Ausdruck ersetzen. Der Unterschied ist, ersetzen replaceFirst das erste Spiel, replaceAll alle Spiele ersetzen.

Das folgende Beispiel diese Funktion zu erklären:

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

public class RegexMatches
{
    private static String REGEX = "dog";
    private static String INPUT = "The dog says meow. " +
                                    "All dogs say meow.";
    private static String REPLACE = "cat";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       // get a matcher object
       Matcher m = p.matcher(INPUT); 
       INPUT = m.replaceAll(REPLACE);
       System.out.println(INPUT);
   }
}

Die obigen Beispiele kompilierten Ergebnisse sind wie folgt:

The cat says meow. All cats say meow.

appendReplacement Methoden und appendTail

Matcher-Klasse stellt auch ein Verfahren zur appendTail appendReplacement und Ersetzen von Text:

Schauen Sie sich das folgende Beispiel diese Funktion zu erklären:

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

public class RegexMatches
{
   private static String REGEX = "a*b";
   private static String INPUT = "aabfooaabfooabfoob";
   private static String REPLACE = "-";
   public static void main(String[] args) {
      Pattern p = Pattern.compile(REGEX);
      // 获取 matcher 对象
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()){
         m.appendReplacement(sb,REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

Die obigen Beispiele kompilierten Ergebnisse sind wie folgt:

-foo-foo-foo-

Patternklassenmethoden

Pattern ist eine nicht-obligatorischen Ausnahmeklasse, die eine regelmäßige Syntaxfehler Expressionsmuster zeigt.

Pattern-Klasse bietet die folgenden Methoden uns zu helfen, sehen, was Fehler aufgetreten ist.

Nein . Verfahren und Beschreibung
1 public String getDescription ()
Erhalten Beschreibung des Fehlers.
2 public int getIndex ()
Holen Sie sich das falsche Index.
3 public String getPattern ()
Holen Sie sich das fehlerhafte Muster eines regulären Ausdrucks.
4 public String getMessage ()
Gibt einen mehrzeiligen String mit der Beschreibung eines Syntaxfehler und seinen Index, eine visuelle Anzeige des fehlerhaften Muster eines regulären Ausdrucks und Fehlerindex.