Regular Expressions
Karaktär klasser
Sök…
Anmärkningar
Enkla klasser
regex | Tändstickor |
---|---|
[abc] | Några av följande tecken: a , b eller c |
[az] | Alla tecken från a till z inklusive (detta kallas ett intervall ) |
[0-9] | Alla siffror från 0 till 9 inklusive |
Vanliga klasser
Vissa grupper / teckenintervall används så ofta, de har speciella förkortningar:
regex | Tändstickor |
---|---|
\w | Alfanumeriska tecken plus understreck (kallas också "ordtecken") |
\W | Icke-ordtecken (samma som [^\w] ) |
\d | Siffror ( bredare än [0-9] eftersom inkluderar persiska siffror, indiska siffror etc.) |
\D | Icke-siffror ( kortare än [^0-9] sedan avvisa persiska siffror, indiska siffror etc.) |
\s | Tecken på blanksteg (mellanslag, flikar, etc. ...) Obs : kan variera beroende på din motor / kontext |
\S | Tecken som inte är whitespace |
Negera klasser
En caret (^) efter den fyrkantiga konsolen fungerar som en negation av karaktärerna som följer den. Detta kommer att matcha alla tecken som inte ingår i teckenklassen.
Negerade teckenklasser matchar också radbrytningstecken, därför om dessa inte ska matchas måste de specifika radbrytningstecknen läggas till klassen (\ r och / eller \ n).
regex | Tändstickor |
---|---|
[^AB] | Någon annan karaktär än A och B |
[^\d] | Alla tecken, utom siffror |
Det grundläggande
Anta att vi har en lista med lag, namngivna så här: Team A
, Team B
, ..., Team Z
Sedan:
-
Team [AB]
: Detta matchar antingenTeam A
ellerTeam B
-
Team [^AB]
: Detta kommer att matcha alla lag utomTeam A
ellerTeam B
Vi måste ofta matcha tecken som "hör hemma" tillsammans i något eller annat sammanhang (som bokstäver från A
och med Z
), och det är detta som teckenklasser är avsedda för.
Matcha olika liknande ord
Tänk på karaktärsklassen [aeiou]
. Denna karaktärsklass kan användas i ett vanligt uttryck för att matcha en uppsättning på samma sätt stavade ord.
b[aeiou]t
matchar:
- fladdermus
- slå vad
- bit
- bot
- men
Det stämmer inte:
- anfall
- btt
- bt
Karaktärklasser överensstämmer med en och en karaktär åt gången.
Icke-alfanumerisk matchning (negativt teckenklass)
[^0-9a-zA-Z]
Detta kommer att matcha alla tecken som varken är siffror eller bokstäver (alfanumeriska tecken). Om även understrykteckenet _
ska negeras, kan uttrycket förkortas till:
[^\w]
Eller:
\W
I följande meningar:
Hej läget?
Jag kan inte vänta på 2017 !!!
Följande tecken matchar:
,
,,
'
,?
och slutet på radkaraktären.
'
,,
!
och slutet på radkaraktären.
UNICODE OBS
Observera att vissa smaker med stöd för Unicode-teckenegenskaper kan tolka \w
och \W
som [\p{L}\p{N}_]
och [^\p{L}\p{N}_]
vilket betyder andra Unicode-bokstäver och numeriska tecken kommer också att inkluderas (se PCRE-dokument ). Här är ett PCRE \w
test :
I .NET, \w
= [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}]
, och notera att det inte stämmer med \p{Nl}
och \p{No}
skillnad från PCRE (se \w
NET-dokumentationen ):
Observera att Unicode 3.1 små bokstäver (som 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚
) av någon anledning inte matchas.
Java's (?U)\w
kommer att matcha en blandning av vad \w
matchar i PCRE och .NET:
Icke-siffriga matchning (negativt teckenklass)
[^0-9]
Detta kommer att matcha alla tecken som inte är ASCII-siffror.
Om Unicode-siffror också ska negeras, kan följande uttryck användas beroende på dina smak- / språkinställningar:
[^\d]
Detta kan förkortas till:
\D
Du kan behöva aktivera Unicode-karaktärsstöd uttryckligen genom att använda u
modifieraren eller programmatiskt på vissa språk, men det kan vara uppenbart. För att uttryckligen förmedla avsikten kan följande konstruktion användas (när support finns tillgängligt):
\P{N}
Vilket per definition betyder: alla tecken som inte är ett numeriskt tecken i något skript. I ett negativt teckenintervall kan du använda:
[^\p{N}]
I följande meningar:
Hej läget?
Jag kan inte vänta på 2017 !!!
Följande tecken matchas:
,
,,
'
,?
, slutet på radtecknet och alla bokstäver (versaler och versaler).
'
,,
!
, slutet på radtecknet och alla bokstäver (versaler och versaler).
Karaktärsklass och vanliga problem som nybörjare möter
1. Karaktärsklass
Teckenklass betecknas med []
. Innehåll i en teckenklass behandlas som single character separately
. antar att vi använder
[12345]
I exemplet ovan betyder det matchning 1 or 2 or 3 or 4 or 5
. Med enkla ord kan det förstås som or condition for single characters
( stress på enstaka tecken )
1.1 Försiktighetsord
- I teckenklass finns det inget begrepp att matcha en sträng. Så om du använder regex
[cat]
betyder det inte att det ska matcha ordetcat
bokstavligen, men det betyder att det ska matcha antingenc
ellera
ellert
. Detta är en mycket vanlig missförståelse som finns bland personer som är nyare att regex. - Ibland använder människor
|
(växling) inuti karaktärsklass och tänker att det kommer att fungera somOR condition
som är fel. t.ex. att använda[a|b]
betyder faktiskt matchaa
eller|
(bokstavligen) ellerb
.
2. Område i teckenklass
Område i karaktärsklass betecknas med -
tecken. Anta att vi vill hitta alla tecken inom engelska alfabet A
till Z
Detta kan göras med hjälp av följande teckenklass
[A-Z]
Detta kan göras för valfritt ASCII- eller unicode-intervall. De vanligaste intervallen inkluderar [AZ]
, [az]
eller [0-9]
. Dessutom kan dessa intervall kombineras i karaktärsklass som
[A-Za-z0-9]
Detta betyder att matcha alla tecken i intervallet A to Z
eller a to z
eller 0 to 9
. Beställningen kan vara vad som helst. Så ovanstående motsvarar [a-zA-Z0-9]
så länge du definierar området är korrekt.
2.1 Varningens ord
Ibland när man skriver mellan
A
ochZ
skriver folk det som[Az]
. Detta är fel i de flesta fall eftersom vi använderz
istället förZ
Så detta anger matchning av alla tecken från ASCII-intervall65
(av A) till122
(av z) som inkluderar många oavsiktliga tecken efter ASCII-intervall90
(av Z). Dock kan[Az]
användas för att matcha alla[a-zA-Z]
i POSIX-stil när sortering är inställd för ett visst språk.[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"
på Cygwin medLC_COLLATE="en_US.UTF-8"
gerABCEDF
. Om du ställerLC_COLLATE
tillC
(på Cygwin, gjort medexport
) ger det förväntadeABCEDEF[]_abcdef
.Betydelsen av
-
inuti karaktärsklass är speciell. Den anger intervall som förklarats ovan. Vad händer om vi vill matcha-
tecken bokstavligen? Vi kan inte sätta det någon annanstans, annars anger det intervall om det sätts mellan två tecken. I så fall måste vi sätta-
starta karaktär klass som[-AZ]
eller slutet av karaktär klass som[AZ-]
ellerescape it
om du vill använda den i mitten som[AZ\-az]
.
3. Negated character class
Negerad karaktär klass betecknas med [^..]
. Caret-tecknet ^
betecknar matchar alla tecken utom det som finns i teckenklass. t.ex
[^cat]
betyder matchar alla tecken utom c
eller a
eller t
.
3.1 Varningens ord
- Betydelsen av caret sign
^
kartlägger till negation endast om det är i början av karaktärsklass. Om det är någon annanstans i karaktär klass behandlas det som bokstavlig karet karaktär utan någon speciell betydelse. - En del människor skriver regex som
[^]
. I de flesta regexmotorer ger detta ett fel. Anledningen är att när du använder^
i utgångspositionen, förväntar det sig åtminstone en karaktär som bör negeras. Men i JavaScript är detta en giltig konstruktion som matchar allt annat än ingenting , dvs matchar alla möjliga symboler (men diakritiker, åtminstone i ES5).
POSIX Teckenklasser
POSIX-teckenklasser är fördefinierade sekvenser för en viss uppsättning tecken.
Teckenklass | Beskrivning |
---|---|
[:alpha:] | Alfabetiska tecken |
[:alnum:] | Alfabetiska tecken och siffror |
[:digit:] | siffror |
[:xdigit:] | Hexadecimala siffror |
[:blank:] | Utrymme och flik |
[:cntrl:] | Kontrollera tecken |
[:graph:] | Synliga tecken (allt utom mellanslag och kontrolltecken) |
[:print:] | Synliga tecken och mellanslag |
[:lower:] | Gemener |
[:upper:] | Versala bokstäver |
[:punct:] | Tegnsättning och symboler |
[:space:] | Alla blankstegstecken, inklusive rader |
Ytterligare karaktärsklasser är tillgängliga beroende på implementering och / eller språk.
Teckenklass | Beskrivning |
---|---|
[:<:] | Början av ordet |
[:>:] | Slut på ordet |
[:ascii:] | ASCII-tecken |
[:word:] | Bokstäver, siffror och understrukning. Motsvarande med \w |
Om du vill använda insidan av en parentessekvens (aka. Teckenklass) bör du också inkludera de fyrkantiga parenteserna. Exempel:
[[:alpha:]]
Detta kommer att matcha ett alfabetiskt tecken.
[[:digit:]-]{2}
Detta kommer att matcha två tecken, som antingen är siffror eller -
. Följande matchar:
-
--
-
11
-
-2
-
3-
Mer information finns på: Regular-expressions.info