Regular Expressions
Klasy postaci
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ć alboTeam A
alboTeam B
-
Team [^AB]
: To pasuje do dowolnej drużyny opróczTeam A
lubTeam 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:
Cześć co tam?
Nie mogę się doczekać 2017 roku !!!
Pasują następujące znaki:
,
,,
'
,?
i znak końca linii.
'
,,
!
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 :
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 ):
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:
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:
Cześć co tam?
Nie mogę się doczekać 2017 roku !!!
Dopasowane zostaną następujące znaki:
,
,,
'
,?
, znak końca wiersza i wszystkie litery (małe i wielkie litery).
'
,,
!
, 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łowacat
ale oznacza, że powinno pasować doc
luba
lubt
. 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ć jakoOR condition
który jest zły. np. użycie[a|b]
faktycznie oznacza dopasowaniea
lub|
(dosłownie) lubb
.
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
doZ
ludzie piszą to jako[Az]
. Jest to błędne w większości przypadków, ponieważ używamyz
zamiastZ
Oznacza to, że pasuje do dowolnego znaku z zakresu ASCII od65
(z A) do122
(z z), który zawiera wiele niezamierzonych znaków po90
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 zLC_COLLATE="en_US.UTF-8"
dajeABCEDF
. Jeśli ustawiszLC_COLLATE
naC
(w Cygwin, zrobione zexport
), 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-]
lubescape 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