Szukaj…


Uwagi

Proste zajęcia

Regex mecze
[abc] Dowolny z następujących znaków: a , b lub c
[az] Dowolna postać od a do z , włącznie (nazywa się to zakresem )
[0-9] Każda cyfra od 0 do 9 włącznie

Wspólne klasy

Niektóre grupy / zakresy znaków są tak często używane, mają specjalne skróty:

Regex mecze
\w Znaki alfanumeryczne oraz podkreślenie (określane również jako „znaki słowne”)
\W Znaki inne niż słowa (takie same jak [^\w] )
\d Cyfry ( szersze niż [0-9] ponieważ obejmują cyfry perskie, indyjskie itp.)
\D Inne niż cyfry ( krótsze niż [^0-9] ponieważ odrzucają cyfry perskie, indyjskie itp.)
\s Znaki białych znaków (spacje, tabulatory itp.) Uwaga : mogą się różnić w zależności od silnika / kontekstu
\S Znaki niebiałe

Negowanie klas

Kreska (^) po nawiasie otwierającym działa jak negacja znaków, które za nim podążają. Spowoduje to dopasowanie wszystkich znaków, które nie należą do klasy postaci.

Negowane klasy znaków również pasują do znaków podziału linii, dlatego jeśli nie mają być one dopasowane, określone znaki podziału linii muszą zostać dodane do klasy (\ r i / lub \ n).

Regex mecze
[^AB] Dowolna postać inna niż A i B
[^\d] Dowolny znak, z wyjątkiem cyfr

Podstawy

Załóżmy, że mamy listę drużyn o takich nazwach: Team A , Team B , ..., Team Z Następnie:

  • Team [AB] : Będzie pasować albo Team A albo Team B
  • Team [^AB] : To pasuje do dowolnej drużyny oprócz Team A lub Team B

Często musimy dopasowywać znaki, które „należą” do siebie w jakimś kontekście (np. Litery od A do Z ) i do tego służą klasy znaków.

Dopasuj różne, podobne słowa

Rozważ klasę znaków [aeiou] . Tej klasy znaków można użyć w wyrażeniu regularnym, aby dopasować zestaw słów o podobnej pisowni.

b[aeiou]t pasuje:

  • nietoperz
  • Zakład
  • kawałek
  • nerw
  • ale

Nie pasuje:

  • atak
  • btt
  • bt

Klasy postaci same w sobie pasują do jednej i tylko jednej postaci na raz.

Dopasowanie niealfanumeryczne (zanegowana klasa znaków)

[^0-9a-zA-Z]

Spowoduje to dopasowanie wszystkich znaków, które nie są ani cyframi, ani literami (znaki alfanumeryczne). Jeśli znak podkreślenia _ ma również zostać zanegowany, wyrażenie można skrócić do:

[^\w]

Lub:

\W

W następujących zdaniach:

  1. Cześć co tam?

  2. Nie mogę się doczekać 2017 roku !!!

Pasują następujące znaki:

  1. , , , ' , ? i znak końca linii.

  2. ' , , ! i znak końca linii.

UWAGA UNICODE
Zauważ, że niektóre smaki z obsługą właściwości znaków Unicode mogą interpretować \w \W jako [\p{L}\p{N}_] i [^\p{L}\p{N}_] co oznacza inne litery Unicode zostaną również uwzględnione znaki numeryczne (patrz dokumenty PCRE ). Oto PCRE \w teście : wprowadź opis zdjęcia tutaj

W .NET, \w = [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}] , i zauważ, że nie pasuje \p{Nl} i \p{No} przeciwieństwie do PCRE (zobacz dokumentację \w .NET ):

Obrazek

Zauważ, że z jakiegoś powodu małe litery Unicode 3.1 (jak 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚 ) nie są dopasowane.

Java (?U)\w dopasuje kombinację tego, co \w pasuje do PCRE i .NET: wprowadź opis zdjęcia tutaj

Dopasowanie bez cyfr (zanegowana klasa znaków)

[^0-9]

Spowoduje to dopasowanie wszystkich znaków, które nie są cyframi ASCII.

Jeśli cyfry Unicode mają być również negowane, można użyć następującego wyrażenia, w zależności od ustawień smaku / języka:

[^\d]

Można to skrócić do:

\D

Może być konieczne włączenie obsługi właściwości znaków Unicode jawnie za pomocą modyfikatora u lub programowo w niektórych językach, ale może to nie być oczywiste. Aby jawnie przekazać intencję, można zastosować następującą konstrukcję (gdy dostępna jest obsługa):

\P{N}

Co z definicji oznacza: dowolny znak, który nie jest znakiem numerycznym w żadnym skrypcie. W negowanym zakresie znaków możesz użyć:

[^\p{N}]

W następujących zdaniach:

  1. Cześć co tam?

  2. Nie mogę się doczekać 2017 roku !!!

Dopasowane zostaną następujące znaki:

  1. , , , ' , ? , znak końca wiersza i wszystkie litery (małe i wielkie litery).

  2. ' , , ! , znak końca wiersza i wszystkie litery (małe i wielkie litery).

Klasa postaci i typowe problemy, z którymi boryka się początkujący

1. Klasa postaci

Klasa znaków jest oznaczona przez [] . Treść w klasie znaków traktowana jest single character separately jako single character separately . np. załóżmy, że używamy

[12345]

W powyższym przykładzie oznacza dopasowanie 1 or 2 or 3 or 4 or 5 . Krótko mówiąc, można to rozumieć jako or condition for single characters ( nacisk na pojedynczy znak )

1.1 Słowo ostrzeżenia

  • W klasie znaków nie ma koncepcji dopasowania łańcucha. Tak więc, jeśli używasz wyrażenia regularnego [cat] , nie oznacza to, że powinno ono dosłownie pasować do słowa cat ale oznacza, że powinno pasować do c lub a lub t . Jest to bardzo powszechne nieporozumienie występujące wśród osób, które są nowsze do wyrażenia regularnego.
  • Czasami ludzie używają | (alternacja) wewnątrz klasy postaci, myśląc, że będzie działać jako OR condition który jest zły. np. użycie [a|b] faktycznie oznacza dopasowanie a lub | (dosłownie) lub b .

2. Zasięg w klasie znaków

Zasięg w klasie znaków oznaczono za pomocą znaku - . Załóżmy, że chcemy znaleźć dowolny znak w alfabecie angielskim od A do Z Można to zrobić za pomocą następującej klasy znaków

[A-Z]

Można to zrobić dla dowolnego prawidłowego zakresu ASCII lub Unicode. Najczęściej używane zakresy to [AZ] , [az] lub [0-9] . Ponadto zakresy te można łączyć w klasie postaci jako

[A-Za-z0-9]

Oznacza to, że pasuje dowolny znak z zakresu od A to Z lub od a to z lub od 0 to 9 . Kolejność może być dowolna. Tak więc powyższe jest równoważne z [a-zA-Z0-9] o ile zdefiniowany zakres jest poprawny.

2.1 Słowo ostrzeżenia

  • Czasami pisząc zakresy od A do Z ludzie piszą to jako [Az] . Jest to błędne w większości przypadków, ponieważ używamy z zamiast Z Oznacza to, że pasuje do dowolnego znaku z zakresu ASCII od 65 (z A) do 122 (z z), który zawiera wiele niezamierzonych znaków po 90 zakresu ASCII (z Z). JEDNAK , [Az] może być użyte do dopasowania wszystkich liter [a-zA-Z] w wyrażeniu regularnym w stylu POSIX, gdy zestawianie jest ustawione dla określonego języka. [[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}" na Cygwin z LC_COLLATE="en_US.UTF-8" daje ABCEDF . Jeśli ustawisz LC_COLLATE na C (w Cygwin, zrobione z export ), da oczekiwaną ABCEDEF[]_abcdef .

  • Znaczenie - wewnątrz klasy postaci jest wyjątkowe. Oznacza zakres, jak wyjaśniono powyżej. Co jeśli chcemy dopasować - dosłownie charakter? Nie możemy go nigdzie umieścić, inaczej oznaczałoby zakresy, jeśli zostanie umieszczone między dwoma znakami. W takim przypadku musimy wstawić - na początku klasy postaci, takiej jak [-AZ] lub na końcu klasy postaci, takiej jak [AZ-] lub escape it jeśli chcesz użyć jej na środku, jak [AZ\-az] .

3. Negowana klasa postaci

Negowana klasa znaków jest oznaczona przez [^..] . Znak karetki ^ oznacza dopasowanie dowolnego znaku z wyjątkiem tego, który występuje w klasie znaków. na przykład

[^cat]

oznacza dopasowanie dowolnego znaku oprócz c lub a lub t .

3.1 Słowo ostrzeżenia

  • Znaczenie znaku karetki ^ odwzorowuje się na negację tylko wtedy, gdy występuje na początku klasy postaci. Jeśli jest gdziekolwiek indziej w klasie, jest traktowany jako dosłowny znak karetki bez żadnego specjalnego znaczenia.
  • Niektórzy piszą wyrażenia regularne takie jak [^] . W większości silników wyrażeń regularnych powoduje to błąd. Ponieważ używasz ^ w pozycji początkowej, oczekuje co najmniej jednego znaku, który powinien być zanegowany. Jednak w JavaScript jest to poprawna konstrukcja pasująca do wszystkiego, ale nic , tzn. Pasuje do dowolnego możliwego symbolu (ale znaków diakrytycznych, przynajmniej w ES5).

Klasy postaci POSIX

Klasy znaków POSIX to predefiniowane sekwencje dla określonego zestawu znaków.

Klasa postaci Opis
[:alpha:] Znaki alfabetu
[:alnum:] Znaki alfabetu i cyfry
[:digit:] Cyfry
[:xdigit:] Cyfry szesnastkowe
[:blank:] Spacja i tab
[:cntrl:] Kontroluj postacie
[:graph:] Widoczne znaki (wszystko oprócz spacji i znaków kontrolnych)
[:print:] Widoczne postacie i spacje
[:lower:] Małe litery
[:upper:] Wielkie litery
[:punct:] Interpunkcja i symbole
[:space:] Wszystkie znaki spacji, w tym podział wiersza

Dodatkowe klasy postaci mogą być dostępne w zależności od implementacji i / lub ustawień regionalnych.

Klasa postaci Opis
[:<:] Początek słowa
[:>:] Koniec słowa
[:ascii:] Znaki ASCII
[:word:] Litery, cyfry i podkreślniki. Odpowiednik \w

Aby użyć wewnętrznej sekwencji nawiasów (zwanej także klasą znaków), należy również dołączyć nawiasy kwadratowe. Przykład:

[[:alpha:]]

Dopasuje jeden znak alfabetyczny.

[[:digit:]-]{2}

Dopasuje 2 znaki, które są albo cyframi, albo - . Następujące będą pasować:

  • --
  • 11
  • -2
  • 3-

Więcej informacji jest dostępnych na: Regular-expressions.info



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow