Latest web development tutorials

wyrażenia regularne Java

Wyrażenie regularne definiuje ciąg wzoru.

Wyrażenia regularne mogą być wykorzystane do wyszukiwania, edytować lub przetwarzania tekstu.

Wyrażenia regularne nie są ograniczone do pewnego języka, ale istnieją subtelne różnice w każdym języku.

Java wyrażeń regularnych i Perl jest najbardziej podobna.

Pakiet java.util.regex obejmuje następujące trzy kategorie:

  • Kategorie Wzór:

    wzór Obiekt jest zwykłym przedstawieniem kompilator wypowiedzi. Klasa wzór ma konstruktora publicznego. Aby utworzyć obiekt wzór, należy najpierw wywołać jej publiczną statyczną metodę kompilacji, która zwraca obiekt wzór. Ta metoda pobiera wyrażenie regularne jako pierwszy argument.

  • Matcher kategorie:

    Matcher celem jest interpretacja ciągu wejściowego i dopasowanie pracy silnika. Podobnie jak w przypadku klasy Pattern Matcher ma konstruktora publicznego. Trzeba wywołać metodę dopasowania wzorca obiektu w celu uzyskania obiektu Matcher.

  • PatternSyntaxException:

    PatternSyntaxException jest nieobowiązkowa klasy wyjątek stanowi regularny wzór ekspresji błędy składniowe.


grupa przechwytywania

Przechwytywanie grupy są wiele znaków, gdy pojedyncza jednostka metody leczenia, za pośrednictwem znaków zgrupowanych w nawiasach utworzyć.

Na przykład, wyrażenie regularne (pies) tworzy jedną grupę, grupę, która zawiera "D", "O" i "g".

grupa przechwytywania przez obliczenie jego otwartego nawiasu numerowane od lewej do prawej. Na przykład, w wyrażeniu ((A), (B (C))), znajdują się cztery takie grupy:

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

Wywołując Matcher obiektu groupCount sposób, aby zobaczyć ile wyraz pakietów. Metoda groupCount zwraca int reprezentujący obiekt Matcher obecnie ma wiele grup przechwytywania.

Istnieje specjalna grupa (grupa 0), to zawsze reprezentuje cały wyraz. Grupa nie jest wliczone w groupCount wartości zwracanej.

Przykłady

Poniższy przykład pokazuje, jak znaleźć ciąg liczb z danego ciągu znaków:

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

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

Składnia wyrażeń regularnych

charakter

wyjaśnienie

\

Kolejna postać jest oznaczona jako znak specjalny, tekstu powrotem odniesień lub ósemkowej ucieczki. Na przykład "n" powoduje wyszukanie znaku "n". "\ N" dopasowuje znak nowej linii. Sekwencja "\\" pasuje "," \ "\ (" Match "(".

^

Dopasuj rozpoczyna ciąg wejściowy. Jeśli właściwość obiektuRegExp pozycję pasującą wielowierszowego,a także po ^ "\ n" lub "\ r" ustawić.

$

Dopasuj końcówkę wejściową pozycji strun. Jeśli własnościwielowierszowego obiektu RegExpza $ również mecze z pozycji "\ r" przed "\ n" lub.

*

Zero lub więcej razy dopasowuje poprzedni znak lub sub-wyrażenie. Na przykład, zo * dopasowuje "Z" i "Zoo". * Ekwiwalent dla {0}.

+

Jeden lub więcej razy dopasowuje poprzedni znak lub sub-wyrażenie. Na przykład "zo +" i "zo" i "Zoo" mecz, ale "z" nie pasują. + Jest równoważna {1}.

?

Dopasowuje zero lub jeden poprzedni znak lub sub-wyrażenie. Na przykład: "Czy (es)?" Odpowiadał "nie" lub "nie" w "nie". ? Odpowiednik {0,1}.

{N}

nnieujemną liczbą całkowitą. Pasuje dokładnienrazy. Na przykład "o {2}" oraz "Bob" w "O" nie pasuje, ale "jedzenie" z "o" meczu dwa.

{N}

nnieujemną liczbą całkowitą. Dopasowanie co najmniejnrazy. Na przykład "o {2,}" nie odpowiada "Bob" w "O", a mecz "foooood" wszystko o. "O {1}" jest równoznaczne z "O +". "O {0}" jest równoznaczne z "O *".

{N,m}

Mi nieujemna liczba całkowitan,gdzien<= m. Dopasowanie co najmniejn ico najwyżejmrazy. Na przykład "o {1,3}" dopasowania "fooooood" w trzech pierwszych o. "O {0,1}" jest równoznaczne z "o? '. Uwaga: Nie można wstawiać spacji między przecinkami i cyfr.

?

Gdy bohaterowie następuje w inny kwalifikator (*, +,? { N}, {n} {n, m}) później, wzorzec dopasowania jest "non-chciwy." "Non-chciwi" wzorzec dopasowania, aby szukać możliwie krótkim sznurkiem, a domyślne "zachłanny" wzorzec dopasowania, aby szukać możliwie długiego łańcucha. Na przykład, w ciągu znaków "oooo" w "O +?" Pasuje tylko jedno "o" i "O +" pasują do wszystkich "O".

,

Dopasowuje dowolny pojedynczy znak z wyjątkiem "\ r \ n" jest. Aby dopasować to "\ r \ n", w tym wszelkie znaki, takie jak wzór wykorzystania "[\ s \ S]" lub tym podobne.

(Wzór)

dopasowaniewzorui przechwytywania podwyrażenie meczu. Można użyć$ 0 ... $ 9 Właściwości wyników z "dopasowania" kolekcji pasują do pobierania niewoli.Aby wyszukać znaki nawiasów (), użyj "\ (" lub "\)".

(: Wzór?)

Dopasowaniewzorca,ale nie uchwycić podwyrażeń mecz, że jest to mecz bez przechwytywania, dobieranie nie są przechowywane do późniejszego wykorzystania. To jest do użytku "lub" znak (|), gdy składniki trybie kombinowanym użytecznego. Na przykład, "przemys (?: Y | y) jest stosunkiem" Przemysł | bardziej ekonomiczny ekspresji branż.

(=Wzór)

Wykonywanie przodu przewidywania podwyrażeń Pierwszy ciąg wyszukiwania pasujące dowzorcaciąg w punkcie startowym dopasowywanie ekspresji. Jest to mecz bez przechwytywania, które nie uchwycić dopasowanie do późniejszego wykorzystania. Na przykład, "Okna (= 95? | 98 | NT | 2000)" Matching "Windows 2000" "Windows", ale nie pasuje do "Windows 3.1" w "Windows". Uprzedzona nie przyjmować postać jest po wystąpieniu mecz, następny mecz dla poszukiwania natychmiast po ostatnim meczu, a nie po pierwszej prognozie w składzie znaków.

(Wzór?!)

Uprzedzona podwyrażenie wykonać do tyłu, to wyrażenie nie pasuje dowzorcaciąg pasujący do punktu początkowego ciągu wyszukiwania. Jest to mecz bez przechwytywania, które nie uchwycić dopasowanie do późniejszego wykorzystania. Na przykład, "Okna (95 | ?! 98 | NT | 2000)" pasuje do "Windows 3.1" w "Windows", ale nie pasuje do "Windows 2000" "Windows". Uprzedzona nie przyjmować postać jest po wystąpieniu mecz, następny mecz dla poszukiwania natychmiast po ostatnim meczu, a nie po pierwszej prognozie w składzie znaków.

x|y

Meczxluby.Na przykład "Z | żywności" pasuje "z" lub "jedzenie". "(Z | f) ood" dopasowanie "zood" lub "żywność".

[Xyz]

zestaw znaków. Dopasowuje dowolny znak włączone. Na przykład "[abc]" pasuje do "zwykłego" w "a".

[^Xyz]

zestaw znaków odwrotnie. Dopasowuje dowolny znak nie są wliczone. Na przykład "[^ abc]" pasuje do "zwykłego" w "P", "l", "i", "n".

[AZ]

Zakres znaków. Dopasowuje dowolny znak w określonym zakresie. Na przykład "[az]" powoduje wyszukanie "a" do wszelkich małych liter w "Z" zasięgu.

[^Az]

Odwrócona zakres znaków. Dopasowuje dowolny znak nie mieści się w podanym zakresie. Na przykład "[^ az]" dopasowuje dowolny nie "a" do każdego z bohaterów w "Z" zasięgu.

\ B

Wyszukuje granicę słowa, czyli pozycję słowo, a przestrzenie między nimi. Na przykład "er \ b" odpowiada "nie" w "er", ale nie pasuje do "czasownik" w "er".

\ B

Dopasować granicę bez słów. "Er \ B" odpowiada "czasownik" w "er", ale nie odpowiada "nie" w "er".

\C x

znak kontrolny mecz wskazany przezx.Na przykład \ cM mecze Control-M lub powrotu karetki.Wysokość xmusi być pomiędzy AZ, AZ. Jeśli nie, to zakłada się, że C "C" charakter siebie.

\ D

Dopasowanie znaków numerycznych. Odpowiednik [0-9].

\ D

Dopasować znaki nienumeryczne. Jest to równoznaczne z [^ 0-9].

\ F

Wysuw meczu. Odpowiednik \ x0c i \ Cl.

\ N

Dopasowane do nowej linii. Odpowiednik \ x0a i \ CJ.

\ R

Dopasowuje powrotu karetki. Odpowiednik \ x0d i \ cm.

\ S

Mecze wszystkie spacje znaków, w tym spacje, tabulatory, podziały stron itp Odpowiednik [\ f \ n \ r \ t \ v].

\ S

Dopasowuje nie-białych znaków znaków. Odpowiednik [^ \ f \ n \ r \ t \ v].

\ T

Zakładka meczów. I \ x09 i równoważnej \ CI.

\ V

Mecze pionowy znak tabulacji. I \ x0b i równoważnej \ cK.

\ W

Dopasowuje dowolny postaci klasy, łącznie z podkreśleniem. I "[A-Za-z0-9_]" równoważne.

\ W

Dopasowuje dowolny znak inny niż słowo. I "[^ A-Za-z0-9_]" równoważne.

\Xn

Meczn no to szesnastkowe kody ucieczki. Szesnastkowy kod ucieczki musi być dokładnie dwie cyfry. Na przykład, "\ x41" dopasowanie "A". "\ X041" i "X04 \" & "1" są równoważne. Umożliwia korzystanie z wyrażeń regularnych kodzie ASCII.

\Num

Mecznum,num tutaj jest dodatnią liczbą całkowitą. Aby uchwycić dopasowanie odwołania wstecznego. Na przykład: "(.) \ 1" powoduje wyszukanie dwóch kolejnych identycznych znaków.

\N

Identyfikuje ósemkowy kod ucieczki lub dodatkowe referencje. Jeśli \npoprzedzone co najmniejnprzechwyconych podwyrażeń, tonjest wsteczne. W przeciwnym razie, jeślinjest liczbą ósemkowy (0-7), a następnieNjest ósemkowe kody ucieczki.

\Nm

Identyfikuje ósemkowy kod ucieczki lub dodatkowe referencje. Jeśli \nmprzed co najmniejnmrejestrowania linii, a następnienmjest wsteczne. Jeśli \NMprzed n wychwytywanianjest wsteczne, a następnie w postacim.Jeżeli te dwa poprzednie przypadki nie są obecne,\nm odpowiada wartości ósemkowejnm,gdzienimsą ósemkowe cyfry (0-7).

\ NML

Gdynjest liczbą ósemkowy(0-3),M iLsą ósemkowy (0-7), pasuje kody ósemkowe ewakuacyjnychNML.

\U n

Meczen,gdzienjest znak Unicode reprezentowany przez czterech liczb w systemie szesnastkowym. Na przykład \ u00A9 dopasowuje symbol praw autorskich (©).

Matcher metody klasy

Metoda index

Metody Index dostarczyć użytecznych wartości indeksu precyzyjnie wskazuje, gdzie można znaleźć wyniki ciąg wejściowy:

Nie. Sposób i opis
1 public int start ()
Zwraca początkowy indeks poprzedniego meczu.
2 public int start (int grupy)
Po powrocie do pracy w poprzednim meczu, zdobyty przez daną grupę sub-sekwencji początkowej indeksu
3 public int end ()
Zwraca przesunięcie po ostatnim znakiem dopasowane.
4 public int end (int grupy)
Po powrocie do pracy w poprzednim meczu, przez danego offsetu po ostatniej grupy znaków po sekwencji przechwytywania.

Metody badawcze

Metody wykorzystywane do sprawdzenia ciąg wejściowy i zwraca wartość logiczną wskazującą, czy wzorzec zostanie znaleziony:

Nie. Sposób i opis
1 public boolean lookingat ()
Próby powierzchnia od początku na początku sekwencji wejściowej odpowiada wzór.
2 public boolean find ()
Spróbuj znaleźć sekwencję wejściowy odpowiadający wzór następnej kolejności.
3 public boolean find (int start)
Resetuje ten mechanizm dopasowywania a następnie próbuje znaleźć dopasowanie do wzorca, wprowadź następny sub-sekwencji, począwszy od określonego indeksu.
4 publiczne mecze Boolean ()
Spróbuj całego regionu i dopasowywania wzorców.

metoda zastępcza

Alternatywą jest zastąpić ciąg w metodzie wprowadzania tekstu:

Nie. Sposób i opis
1 publicznego Matcher appendReplacement (StringBuffer sb, String zastępcza)
Aby osiągnąć uzupełnień nieterminalne i krok zastępstw.
2 public StringBuffer appendTail (StringBuffer sb)
Osiągnąć uzupełnień zacisków i krok zastępstw.
3 public String replaceAll (wymiana String)
tryb Replace z danym ciągiem zastępczym, aby dopasować kolejność wprowadzania dla każdej sekwencji.
4 public String replaceFirst (wymiana String)
tryb Replace z danym ciągiem zastępczym, pasującego do sekwencji wejściowej pierwszego sub-sekwencji.
5 public static quoteReplacement String (String s)
Zwraca ciąg znaków dosłownego zastępczą. Metoda ta zwraca ciąg znaków, który jest przekazywany jako metoda pracy klasowej appendReplacement Matcher jako dosłownego łańcucha.

Metoda start i end

Oto przykład liczby zdarzeń w ciągu wejściowego do zliczania słów pojawia "cat":

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

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

Można to zaobserwować na przykładzie granicy słowa, aby upewnić się, że litera "c" "a" "t" nie jest tylko długie podciągi słowo. Zapewnia również kilka przydatnych informacji na temat łańcucha wejściowego jest dopasowane pozycje.

Metoda start zwraca operację podczas poprzedniego spotkania z początkowego indeksu danej grupy przechwycone podciąg, zakończyć metodę dopasowania ostatni indeks plus jeden znak.

mecze i metody lookingat

mecze i metody lookingat służą do spróbować dopasować sekwencję wzorca wejściowego. Różnią się one od wymagań całej sekwencji dopasowywania meczu, ale nie lookingat wymagane.

Te dwa sposoby są często stosowane w rozpoczyna się ciąg wejściowych.

Dzięki poniższym przykładzie wyjaśnić tę funkcję:

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

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

replaceFirst metody i replaceAll

Metoda replaceFirst i replaceAll stosowany w celu zastąpienia tekst pasujący do wyrażenia regularnego. Różnica jest, replaceFirst wymienić pierwszy mecz, replaceAll wymienić wszystkie mecze.

Poniższy przykład wyjaśnić tę funkcję:

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

The cat says meow. All cats say meow.

appendReplacement metody i appendTail

Klasa Matcher zapewnia również sposób appendTail appendReplacement i zastąpić tekst:

Spójrz na poniższy przykład, aby wyjaśnić tę funkcję:

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

-foo-foo-foo-

Metody klasy PatternSyntaxException

PatternSyntaxException jest nieobowiązkowa klasy wyjątku, co oznacza regularne błędy składniowe wzór ekspresji.

Klasa PatternSyntaxException zapewnia następujące metody, aby pomóc nam zobaczyć, co działo wystąpił błąd.

Nie. Sposób i opis
1 public String pobierzOpis ()
Pobierz opis błędu.
2 public int getIndex ()
Uzyskaj niewłaściwy indeks.
3 public String getPattern ()
Uzyskaj błędną wzorca wyrażenia regularnego.
4 public String getMessage ()
Zwraca ciąg multi-liniowy zawierający opis błędu składni i jego indeksu wizualnego wskazania błędnej wzorcu wyrażenia regularnego, a wskaźnik błędu.