Regular Expressions
Karakter klassen
Zoeken…
Opmerkingen
Eenvoudige lessen
| regex | Wedstrijden |
|---|---|
[abc] | Een van de volgende tekens: a , b of c |
[az] | Elk teken van a tot z , inclusief (dit wordt een bereik genoemd ) |
[0-9] | Elk cijfer van 0 om te 9 , inclusief |
Gemeenschappelijke klassen
Sommige groepen / reeksen tekens worden zo vaak gebruikt, ze hebben speciale afkortingen:
| regex | Wedstrijden |
|---|---|
\w | Alfanumerieke tekens plus het onderstrepingsteken (ook wel "woordtekens" genoemd) |
\W | Niet-woordtekens (hetzelfde als [^\w] ) |
\d | Cijfers ( breder dan [0-9] sinds Perzische cijfers, Indiase cijfers enz.) |
\D | Niet-cijfers ( korter dan [^0-9] sinds Perzische cijfers, Indiase cijfers weigeren) |
\s | Witruimte-tekens (spaties, tabbladen, enz ...) Opmerking : kan variëren afhankelijk van uw engine / context |
\S | Niet-witruimte tekens |
Klassen ontkennen
Een caret (^) na de vierkante haakje opent als een ontkenning van de tekens die erop volgen. Dit komt overeen met alle tekens die niet in de tekenklasse vallen.
Niet-overeenkomende tekenklassen komen ook overeen met regeleindetekens. Als deze niet overeenkomen, moeten de specifieke regeleindetekens aan de klasse worden toegevoegd (\ r en / of \ n).
| regex | Wedstrijden |
|---|---|
[^AB] | Elk ander teken dan A en B |
[^\d] | Elk teken, behalve cijfers |
De basis
Stel dat we een lijst met teams hebben met de volgende naam: Team A , Team B , ..., Team Z Vervolgens:
-
Team [AB]: dit komt overeen metTeam AofTeam B -
Team [^AB]: dit komt overeen met elk team behalveTeam AofTeam B
We moeten vaak tekens die bij elkaar horen in een of andere context (zoals letters van A tot Z ) bij elkaar zoeken, en dit is waar karakterklassen voor zijn.
Match verschillende, vergelijkbare woorden
Overweeg de karakterklasse [aeiou] . Deze tekenklasse kan in een reguliere expressie worden gebruikt om overeen te komen met een set van gelijk gespelde woorden.
b[aeiou]t overeen met:
- knuppel
- inzet
- beetje
- bot
- maar
Het komt niet overeen:
- aanval
- BTT
- bt
Karakterklassen op hun eigen match een en slechts een karakter tegelijk.
Overeenkomen met niet-alfanumerieke tekens (ontkende tekenklasse)
[^0-9a-zA-Z]
Dit komt overeen met alle tekens die geen cijfers of letters zijn (alfanumerieke tekens). Als het onderstrepingsteken _ ook moet worden genegeerd, kan de uitdrukking worden ingekort tot:
[^\w]
Of:
\W
In de volgende zinnen:
Hoi, hoe is het?
Ik kan niet wachten op 2017 !!!
De volgende tekens komen overeen:
,,,',?en het einde van de regel.
',!en het einde van de regel.
UNICODE OPMERKING
Merk op dat sommige smaken met ondersteuning voor Unicode-karaktereigenschappen \w en \W kunnen interpreteren als [\p{L}\p{N}_] en [^\p{L}\p{N}_] wat andere Unicode-letters betekent en numerieke tekens worden ook opgenomen (zie PCRE-documenten ). Hier is een PCRE \w test :
In .NET, \w = [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Mn}\p{Nd}\p{Pc}] , en merk op dat het niet overeenkomt met \p{Nl} en \p{No} tegenstelling tot PCRE (zie de \w .NET-documentatie ):
Merk op dat om een of andere reden kleine letters van Unicode 3.1 (zoals 𝐚𝒇𝓌𝔨𝕨𝗐𝛌𝛚 ) niet overeenkomen.
Java's (?U)\w komen overeen met een mix van wat \w overeenkomt met PCRE en .NET:
Overeenkomen met niet-cijfers (ontkende tekenklasse)
[^0-9]
Dit komt overeen met alle tekens die geen ASCII-cijfers zijn.
Als Unicode-cijfers ook moeten worden genegeerd, kan de volgende uitdrukking worden gebruikt, afhankelijk van uw smaak- / taalinstellingen:
[^\d]
Dit kan worden ingekort tot:
\D
Mogelijk moet u ondersteuning voor Unicode-tekeneigenschappen expliciet inschakelen door de u modifier of programmatisch in sommige talen te gebruiken, maar dit is niet vanzelfsprekend. Om de intentie expliciet over te brengen, kan het volgende construct worden gebruikt (wanneer ondersteuning beschikbaar is):
\P{N}
Wat per definitie betekent: elk teken dat in geen enkel script een numeriek teken is. In een ontkend tekenbereik kunt u het volgende gebruiken:
[^\p{N}]
In de volgende zinnen:
Hoi, hoe is het?
Ik kan niet wachten op 2017 !!!
De volgende karakters komen overeen:
,,,',?, het einde van de regel en alle letters (kleine letters en hoofdletters).
',!, het einde van de regel en alle letters (kleine letters en hoofdletters).
Karakterklasse en veel voorkomende problemen voor beginners
1. Karakterklasse
Karakterklasse wordt aangegeven met [] . Inhoud binnen een tekenklasse wordt single character separately behandeld als single character separately . Stel bijvoorbeeld dat we gebruiken
[12345]
In het bovenstaande voorbeeld betekent dit match 1 or 2 or 3 or 4 or 5 . In eenvoudige woorden, het kan worden begrepen als or condition for single characters ( nadruk op één teken )
1.1 Woord van waarschuwing
- In de tekenklasse is er geen concept om een string te matchen. Dus als u regex
[cat], betekent dit niet dat het letterlijk overeen moet komen met het woordcat, maar het betekent dat het moet overeenkomen metcofaoft. Dit is een veel voorkomend misverstand dat bestaat bij mensen die nieuw zijn in regex. - Soms gebruiken mensen
|(afwisseling) in de karakterklasse, denkend dat het zal fungeren alsOR conditiondie verkeerd is. bijv. het gebruik van[a|b]betekent eigenlijk matchaof|(letterlijk) ofb.
2. Bereik in karakterklasse
Bereik in tekenklasse wordt aangegeven met - teken. Stel dat we elk teken binnen de Engelse alfabetten A tot Z . Dit kan worden gedaan met behulp van de volgende tekenklasse
[A-Z]
Dit kan worden gedaan voor elk geldig ASCII- of Unicode-bereik. De meest gebruikte bereiken zijn [AZ] , [az] of [0-9] . Bovendien kunnen deze bereiken worden gecombineerd in tekenklasse als
[A-Za-z0-9]
Dit betekent dat elk teken in het bereik A to Z of a to z of 0 to 9 . Het bestellen kan van alles zijn. Het bovenstaande is dus gelijk aan [a-zA-Z0-9] zolang het bereik dat u definieert correct is.
2.1 Woord van waarschuwing
Soms schrijven mensen het bij het schrijven van bereiken voor
AtotZals[Az]. In de meeste gevallen is dit verkeerd omdat wezplaats vanZDit betekent dus dat elk teken uit ASCII-bereik65(van A) tot122(van z) overeenkomt met veel onbedoeld teken na ASCII-bereik90(van Z). EC[Az]kan echter worden gebruikt om alle[a-zA-Z]-letters in regex in POSIX-stijl te matchen wanneer de sortering is ingesteld voor een bepaalde taal.[[ "ABCEDEF[]_abcdef" =~ ([Az]+) ]] && echo "${BASH_REMATCH[1]}"op Cygwin metLC_COLLATE="en_US.UTF-8"levertABCEDF. Als uLC_COLLATEopC(op Cygwin, klaar metexport), geeft dit de verwachteABCEDEF[]_abcdef.Betekenis van
-binnen de karakterklasse is speciaal. Het geeft het bereik aan zoals hierboven uitgelegd. Wat als we willen aan te passen-karakter letterlijk? We kunnen het nergens anders plaatsen, omdat het een bereik aangeeft als het tussen twee tekens wordt geplaatst. In dat geval moeten we-in het begin van de karakterklasse zoals[-AZ]of in het einde van de karakterklasse zoals[AZ-]ofescape itals je het in het midden wilt gebruiken zoals[AZ\-az].
3. Ontkende karakterklasse
Negatieve tekenklasse wordt aangegeven door [^..] . Het caret-teken ^ duidt op elk willekeurig teken behalve het teken in de tekenklasse. bv
[^cat]
betekent overeenkomen met elk teken behalve c of a of t .
3.1 Woord van waarschuwing
- De betekenis van het caret-teken
^alleen in aanmerking voor ontkenning als het in de beginklasse staat. Als het ergens anders in de tekenklasse voorkomt, wordt het behandeld als letterlijk caret-teken zonder speciale betekenis. - Sommige mensen schrijven regex zoals
[^]. In de meeste regex-motoren geeft dit een foutmelding. De reden hiervoor is dat wanneer u^in de beginpositie gebruikt, dit ten minste één teken verwacht dat moet worden genegeerd. In JavaScript is dit echter een geldig construct dat overeenkomt met alles behalve niets , dat wil zeggen dat het overeenkomt met elk mogelijk symbool (behalve diakritische tekens, althans in ES5).
POSIX-tekenklassen
POSIX-tekenklassen zijn vooraf gedefinieerde reeksen voor een bepaalde reeks tekens.
| Karakterklasse | Beschrijving |
|---|---|
[:alpha:] | Alfabetische tekens |
[:alnum:] | Alfabetische tekens en cijfers |
[:digit:] | cijfers |
[:xdigit:] | Hexadecimale cijfers |
[:blank:] | Spatie en Tab |
[:cntrl:] | Controle karakters |
[:graph:] | Zichtbare tekens (alles behalve spaties en controletekens) |
[:print:] | Zichtbare tekens en spaties |
[:lower:] | Kleine letters |
[:upper:] | Hoofdletters |
[:punct:] | Interpunctie en symbolen |
[:space:] | Alle witruimtetekens, inclusief regeleinden |
Extra karakterklassen kunnen beschikbaar zijn, afhankelijk van de implementatie en / of locale.
| Karakterklasse | Beschrijving |
|---|---|
[:<:] | Begin van het woord |
[:>:] | Einde van woord |
[:ascii:] | ASCII-tekens |
[:word:] | Letters, cijfers en onderstrepingstekens. Gelijk aan \w |
Als u de reeks tussen haakjes (ook wel tekenklasse) wilt gebruiken, moet u ook de vierkante haakjes opnemen. Voorbeeld:
[[:alpha:]]
Dit komt overeen met één alfabetisch teken.
[[:digit:]-]{2}
Dit komt overeen met 2 tekens, die cijfers of - . Het volgende komt overeen:
-
-- -
11 -
-2 -
3-
Meer informatie is beschikbaar op: Regular-expressions.info
