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 met Team A of Team B
  • Team [^AB] : dit komt overeen met elk team behalve Team A of Team 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:

  1. Hoi, hoe is het?

  2. Ik kan niet wachten op 2017 !!!

De volgende tekens komen overeen:

  1. , , , ' , ? en het einde van de regel.

  2. ' , ! 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 : voer hier de afbeeldingsbeschrijving in

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

afbeelding

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: voer hier de afbeeldingsbeschrijving in

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:

  1. Hoi, hoe is het?

  2. Ik kan niet wachten op 2017 !!!

De volgende karakters komen overeen:

  1. , , , ' , ? , het einde van de regel en alle letters (kleine letters en hoofdletters).

  2. ' , ! , 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 woord cat , maar het betekent dat het moet overeenkomen met c of a of t . 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 als OR condition die verkeerd is. bijv. het gebruik van [a|b] betekent eigenlijk match a of | (letterlijk) of b .

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 A tot Z als [Az] . In de meeste gevallen is dit verkeerd omdat we z plaats van Z Dit betekent dus dat elk teken uit ASCII-bereik 65 (van A) tot 122 (van z) overeenkomt met veel onbedoeld teken na ASCII-bereik 90 (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 met LC_COLLATE="en_US.UTF-8" levert ABCEDF . Als u LC_COLLATE op C (op Cygwin, klaar met export ), geeft dit de verwachte ABCEDEF[]_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-] of escape it als 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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow