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 antingen Team A eller Team B
  • Team [^AB] : Detta kommer att matcha alla lag utom Team A eller Team 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:

  1. Hej läget?

  2. Jag kan inte vänta på 2017 !!!

Följande tecken matchar:

  1. , , , ' , ? och slutet på radkaraktären.

  2. ' , , ! 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 : ange bildbeskrivning här

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 ):

Bild

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: ange bildbeskrivning här

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:

  1. Hej läget?

  2. Jag kan inte vänta på 2017 !!!

Följande tecken matchas:

  1. , , , ' , ? , slutet på radtecknet och alla bokstäver (versaler och versaler).

  2. ' , , ! , 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 ordet cat bokstavligen, men det betyder att det ska matcha antingen c eller a eller t . 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 som OR condition som är fel. t.ex. att använda [a|b] betyder faktiskt matcha a eller | (bokstavligen) eller b .

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 och Z skriver folk det som [Az] . Detta är fel i de flesta fall eftersom vi använder z istället för Z Så detta anger matchning av alla tecken från ASCII-intervall 65 (av A) till 122 (av z) som inkluderar många oavsiktliga tecken efter ASCII-intervall 90 (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 med LC_COLLATE="en_US.UTF-8" ger ABCEDF . Om du ställer LC_COLLATE till C (på Cygwin, gjort med export ) ger det förväntade ABCEDEF[]_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-] eller escape 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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow