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 AellerTeam B -
Team [^AB]: Detta kommer att matcha alla lag utomTeam AellerTeam 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 ordetcatbokstavligen, men det betyder att det ska matcha antingencelleraellert. 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 conditionsom är fel. t.ex. att använda[a|b]betyder faktiskt matchaaeller|(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
AochZskriver folk det som[Az]. Detta är fel i de flesta fall eftersom vi använderzistället förZSå 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_COLLATEtillC(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 itom 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
