Download PDF

Reguliere expressie is een groep tekens of symbolen die wordt gebruikt om een specifiek patroon uit een tekst te vinden; je kunt ze wildcards op steroïden noemen, als je wilt. Als ontwikkelaar kan het beheersen van reguliere expressies een krachtig hulpmiddel zijn om in je gereedschapskist te hebben; je zult ze zeker een keer in je programma’s moeten gebruiken, zoeken en vervangen met reguliere expressies in IDE’s is soms erg handig en ik gebruik ze elke dag in de opdrachtregel.

Verschillende applicaties en programmeertalen kunnen verschillende implementaties voor reguliere expressies hebben, maar de onderliggende concepten zijn meestal hetzelfde. In dit bericht ga ik alles uitleggen wat je moet weten over reguliere expressies.

Een reguliere expressie is een patroon dat van links naar rechts wordt gematcht met een onderwerpstring. Het woord “Reguliere expressie” is een mond vol, je zult de term meestal afgekort vinden als “regex” of “regexp”. Reguliere expressie wordt gebruikt voor het vervangen van tekst in een string, het valideren van formulieren, het extraheren van een substring uit een string op basis van een pattern match, en nog veel meer.

Stel je voor dat je een applicatie aan het schrijven bent en je wilt de regels vastleggen voor wanneer een gebruiker zijn gebruikersnaam kiest. We willen toestaan dat de gebruikersnaam letters, cijfers, underscores en koppeltekens bevat. We willen ook het aantal karakters in de gebruikersnaam beperken zodat het er niet lelijk uitziet. We gebruiken de volgende reguliere expressie om een gebruikersnaam te valideren:

Reguliere expressie

De bovenstaande reguliere expressie kan de strings john_doe, jo-hn_doe en john12_as accepteren. Hij komt niet overeen met Jo omdat die tekenreeks hoofdletters bevat en te kort is.

Inhoudsopgave

  • Basic Matchers
  • Meta-teken
  • Volledige stop
  • Tekenset
  • Negatieve tekenset
  • Herhalingen
  • De Ster
  • De Plus
  • Het Vraagteken
  • Braces
  • Tekengroep
  • Alternatie
  • Speciaal teken
  • Ankers
  • Caret
  • Dollar
  • Shorthand Karaktersets
  • Lookaround
  • Positieve Lookahead
  • Negatieve Lookahead
  • Positieve Lookbehind
  • Flags
  • Case Insensitive
  • Globaal zoeken
  • Multilijn
  • Greedy vs lazy matching

Basic Matchers

Een reguliere expressie is gewoon een patroon van tekens die we gebruiken om
zoeken in een tekst uit te voeren. De reguliere uitdrukking the betekent bijvoorbeeld: de letter
t, gevolgd door de letter h, gevolgd door de letter e.

the => The fat cat sat on the mat.

Test de reguliere uitdrukking

De reguliere uitdrukking 123 komt overeen met de tekenreeks 123. De reguliere expressie wordt vergeleken met een invoerstring door elk teken in de reguliere
-expressie te vergelijken met elk teken in de invoerstring, een voor een. Reguliere
uitdrukkingen zijn normaal gesproken hoofdlettergevoelig, dus de reguliere uitdrukking The zou
niet overeenkomen met de string the.

The => The fat cat sat on the mat.

Test de reguliere uitdrukking

Meta Characters

Meta Characters zijn de bouwstenen van de reguliere uitdrukkingen. Meta
tekens staan niet voor zichzelf, maar worden in plaats daarvan op een
speciale manier geïnterpreteerd. Sommige meta-tekens hebben een speciale betekenis en worden binnen vierkante haken geschreven. De meta-tekens zijn als volgt:

2.1 Volledige stop

Volledige stop . is het eenvoudigste voorbeeld van een meta-teken. Het metateken .
komt overeen met elk afzonderlijk teken. Het komt niet overeen met return- of newline-tekens.
Bijv. de reguliere uitdrukking .ar betekent: elk teken, gevolgd door de letter a, gevolgd door de letter r.

.ar => The car parked in the garage.

Test de reguliere uitdrukking

2.2 Tekenset

Karaktersets worden ook wel tekenklasse genoemd. Vierkante haakjes worden gebruikt om
karaktersets aan te geven. Gebruik een koppelteken binnen een tekenset om het bereik van de tekens te specificeren. De volgorde van het tekenbereik binnen de vierkante haken
doet er niet toe. Bijvoorbeeld, de reguliere uitdrukking he betekent: een hoofdletter T of kleine letter t, gevolgd door de letter h, gevolgd door de letter e.

he => The car parked in the garage.

Test de reguliere uitdrukking

Een punt binnen een tekenset betekent echter een letterlijke punt. De reguliere uitdrukking
ar betekent: een kleine letter a, gevolgd door letter r,
gevolgd door een punt ..

ar => A garage is a good place to park a car.

Test de reguliere uitdrukking

2.2.1 Negated character set

In het algemeen vertegenwoordigt het caret-symbool het begin van de tekenreeks, maar wanneer het wordt
getypt na het openingsvierkant haakje, ontkent het de tekenset. Bijvoorbeeld
, de reguliere uitdrukking ar betekent: elk teken behalve c,
gevolgd door het teken a, gevolgd door de letter r.

ar => The car parked in the garage.

Test de reguliere uitdrukking

2.3 Herhalingen

De volgende meta-tekens +, * of ? worden gebruikt om aan te geven hoe vaak een subpatroon mag voorkomen. Deze meta-tekens werken verschillend in verschillende
situaties.

2.3.1 De ster

Het symbool * komt overeen met nul of meer herhalingen van de voorafgaande matcher. De reguliere uitdrukking a* betekent: nul of meer herhalingen van het voorafgaande kleine letterteken a. Maar als deze voorkomt na een tekenset of -klasse dan vindt deze de herhalingen van de gehele tekenset. Bijvoorbeeld, de reguliere uitdrukking * betekent: elk aantal kleine letters op een rij.

* => The car parked in the garage #21.

Test de reguliere uitdrukking

Het symbool * kan worden gebruikt met het metateken . om overeen te komen met elke reeks van
-tekens .*. Het symbool * kan worden gebruikt met het spatiesymbool \s
om overeen te komen met een tekenreeks van spatiesymbolen. De uitdrukking
\s*cat\s* betekent bijvoorbeeld: nul of meer spaties, gevolgd door het kleine letterteken c,
gevolgd door het kleine letterteken a, gevolgd door het kleine letterteken t, gevolgd door nul of meer spaties.

\s*cat\s* => The fat cat sat on the concatenation.

Test de reguliere uitdrukking

2.3.2 De plus

Het symbool + komt overeen met een of meer herhalingen van het voorgaande teken. Bijvoorbeeld, de reguliere uitdrukking c.+t betekent: kleine letter c, gevolgd door ten minste één teken, gevolgd door het kleine teken t. Verduidelijkt moet worden dat t het laatste t in de zin is.

c.+t => The fat cat sat on the mat.

Test de reguliere uitdrukking

2.3.3 Het vraagteken

In reguliere uitdrukkingen maakt het metateken ? het voorafgaande teken
optioneel. Dit teken komt overeen met nul of één instantie van het voorafgaande teken. Bijvoorbeeld, de reguliere uitdrukking ?he betekent: Optioneel de hoofdletter T, gevolgd door het kleine letterteken h, gevolgd door het kleine letterteken e.

he => The car is parked in the garage.

Test de reguliere uitdrukking

?he => The car is parked in the garage.

Test de reguliere uitdrukking

2.4 Koppeltekens

In reguliere uitdrukkingen worden koppeltekens, ook wel kwantificeerders genoemd, gebruikt om aan te geven hoe vaak een teken of een groep tekens kan worden
herhaald. Bijvoorbeeld, de reguliere uitdrukking {2,3} betekent: Kom overeen met ten minste 2 cijfers, maar niet meer dan 3 ( tekens in het bereik van 0 tot 9).

{2,3} => The number was 9.9997 but we rounded it off to 10.0.

Test de reguliere expressie

We kunnen het tweede cijfer weglaten. Bijvoorbeeld, de reguliere uitdrukking
{2,} betekent: Kom overeen met 2 of meer cijfers. Als we ook de komma weglaten betekent de reguliere uitdrukking
{3}: Kom precies 3 cijfers overeen.

{2,} => The number was 9.9997 but we rounded it off to 10.0.

Test de reguliere expressie

{3} => The number was 9.9997 but we rounded it off to 10.0.

Test de reguliere expressie

2.5 Tekengroep

Tekengroep is een groep sub-patronen die binnen Parentheses (…) wordt geschreven. Zoals we eerder hebben besproken, wordt in reguliere uitdrukkingen het voorafgaande teken herhaald als we een kwantor na een teken plaatsen. Maar als we een kwantor na een tekengroep plaatsen, dan wordt de hele tekengroep herhaald. Bijvoorbeeld, de reguliere uitdrukking (ab)* komt overeen met nul of meer herhalingen van het teken ab. We kunnen ook de afwisseling | meta-teken binnen tekengroep gebruiken. Bijvoorbeeld, de reguliere uitdrukking (c|g|p)ar betekent: kleine letters c, g of p, gevolgd door teken a, gevolgd door teken r.

(c|g|p)ar => The car is parked in the garage.

Test de reguliere uitdrukking

2.6 Afwisseling

In reguliere uitdrukking wordt Verticale balk | gebruikt om afwisseling te definiëren. Afwisseling is als een voorwaarde tussen meerdere expressies. Nu denkt u misschien dat tekenset en alternatie op dezelfde manier werken. Maar het grote verschil tussen character set en alternation is dat character set werkt op character niveau, maar alternation werkt op expressie niveau. Bijvoorbeeld, de reguliere uitdrukking (T|t)he|car betekent: hoofdletter T of kleine letter t, gevolgd door kleine letter h, gevolgd door kleine letter e of kleine letter c, gevolgd door kleine letter a, gevolgd door kleine letter r.

(T|t)he|car => The car is parked in the garage.

Test de reguliere uitdrukking

2.7 Escaping special character

Backslash \ wordt in reguliere uitdrukkingen gebruikt om het volgende karakter te escapen. Dit
stelt ons in staat om een symbool als overeenkomend teken te specificeren, inclusief gereserveerde
tekens { } / \ + * . $ ^ | ?. Om een speciaal teken als overeenkomend teken te gebruiken, moet u

Voorbeeld, de reguliere uitdrukking . wordt gebruikt om overeen te komen met elk teken behalve
newline. Om nu te matchen met . in een invoer string betekent de reguliere expressie (f|c|m)at\.?: kleine letter f, c of m gevolgd door kleine letter
teken a, gevolgd door kleine letter t, gevolgd door optioneel . teken.

(f|c|m)at\.? => The fat cat sat on the mat.

Test de reguliere expressie

2.8 Ankers

In reguliere expressies gebruiken we ankers om te controleren of het overeenkomende symbool het
begin-symbool of het eind-symbool van de invoerstring is. Ankers zijn er in twee soorten: Het eerste type is Caret ^ dat controleert of het overeenkomende teken het
beginteken van de invoer is en het tweede type is Dollar $ dat controleert of het overeenkomende
teken het laatste teken van de invoertekenreeks is.

2.8.1 Caret

Caret ^-symbool wordt gebruikt om te controleren of het overeenkomende teken het
eerste teken van de invoertekenreeks is. Als we de volgende reguliere expressie ^a (als a het
begin-symbool is) toepassen op invoerstring abc, komt deze overeen met a. Maar als we reguliere expressie ^b toepassen op bovenstaande invoerstring, komt deze nergens mee overeen. Omdat in invoer string abc b niet het start symbool is. Laten we eens kijken naar een andere reguliere expressie ^(T|t)he die betekent: hoofdletterteken T of kleine letterteken t is het startsymbool van de invoerstring, gevolgd door
kleine letterteken h, gevolgd door kleine letterteken e.

(T|t)he => The car is parked in the garage.

Test de reguliere expressie

^(T|t)he => The car is parked in the garage.

Test de reguliere expressie

2.8.2 Dollar

Dollar $ symbool wordt gebruikt om te controleren of het overeenkomende teken het laatste teken
van de invoerstring is. Bijvoorbeeld, reguliere expressie (at\.)$ betekent: een kleine letter a, gevolgd door een kleine letter t, gevolgd door een teken . en de matcher moet het einde van de tekenreeks zijn.

(at\.) => The fat cat. sat. on the mat.

Test de reguliere expressie

(at\.)$ => The fat cat. sat. on the mat.

Test de reguliere expressie

Shorthandtekenreeksen

Reguliere expressie biedt shorthands voor de veelgebruikte tekenreeksen, die handige shorthands bieden voor veelgebruikte reguliere expressies. De shorthand-tekensets zijn als volgt:

Lookaround

Lookbehind en lookahead (ook wel lookaround genoemd) zijn specifieke typen
niet-afvangende groepen (Gebruikt om met het patroon overeen te komen, maar niet opgenomen in de overeenkomende lijst). Lookaheads worden gebruikt wanneer we de voorwaarde hebben dat dit patroon wordt voorafgegaan of gevolgd door een ander bepaald patroon. Bijvoorbeeld, wij willen alle getallen die worden voorafgegaan door het teken $ uit de volgende invoerstring .44 and .88 halen. We gebruiken de volgende reguliere expressie (?<=$)*, die betekent: haal alle getallen op die het teken . bevatten en die worden voorafgegaan door het teken $. Hieronder volgen de lookarounds die worden gebruikt in reguliere expressies:

4.1 Positieve lookahead

De positieve lookahead stelt dat het eerste deel van de expressie moet worden
gevolgd door de lookahead expressie. De geretourneerde overeenkomst bevat alleen de tekst die overeenkomt met het eerste deel van de uitdrukking. Om een positieve
lookahead te definiëren, worden haakjes gebruikt. Binnen die haakjes wordt een vraagteken met gelijkheidsteken gebruikt, zoals hier: (?=…). Lookahead expressie wordt geschreven na het gelijkheidsteken binnen haakjes. Bijvoorbeeld, de reguliere uitdrukking
(T|t)he(?=\sfat) betekent: kom naar keuze overeen met kleine letter t of hoofdletter T, gevolgd door letter h, gevolgd door letter e. Tussen haakjes definiëren we positieve lookahead die de reguliere expressiemachine vertelt om overeen te komen met The of the die worden gevolgd door het woord fat.

(T|t)he(?=\sfat) => The fat cat sat on the mat.

Test de reguliere expressie

4.2 Negatieve lookahead

Negatieve lookahead wordt gebruikt wanneer we alle overeenkomsten van input string
moeten krijgen die niet worden gevolgd door een patroon. Negatieve lookahead wordt op dezelfde manier gedefinieerd als positieve lookahead, maar het enige verschil is dat we in plaats van het gelijke = teken, het negatie ! teken gebruiken, dus (?!…). Laten we eens kijken naar de volgende reguliere expressie (T|t)he(?!\sfat) die betekent: haal alle The of the woorden uit de input string die niet worden gevolgd door het woord fat voorafgegaan door een spatie.

(T|t)he(?!\sfat) => The fat cat sat on the mat.

Test de reguliere expressie

4.3 Positive Lookbehind

Positive lookbehind wordt gebruikt om alle overeenkomsten te krijgen die worden voorafgegaan door een
specifiek patroon. Positieve lookbehind wordt aangeduid met (?<=…). Bijvoorbeeld, de reguliere uitdrukking (?<=(T|t)he\s)(fat|mat) betekent: haal alle fat of mat woorden uit de input string die na het woord The of the komen.

(?<=(T|t)he\s)(fat|mat) => The fat cat sat on the mat.

Test de reguliere uitdrukking

4.4 Negatieve lookbehind

Negatieve lookbehind wordt gebruikt om alle overeenkomsten te krijgen die niet worden voorafgegaan door een
specifiek patroon. Negatieve lookbehind wordt aangeduid met (?<!…). Bijvoorbeeld, de reguliere uitdrukking (?<!(T|t)he\s)(cat) betekent: haal alle cat woorden uit de input string die niet na het woord The of the staan.

(?<!(T|t)he\s)(cat) => The cat sat on cat.

Test de reguliere expressie

Flags

Flags worden ook wel modifiers genoemd omdat ze de uitvoer van een reguliere
expressie wijzigen. Deze vlaggen kunnen in elke volgorde of combinatie worden gebruikt, en zijn een integraal onderdeel van de RegExp.

5.1 Hoofdletterongevoelig

De modifier i wordt gebruikt om hoofdletterongevoelige overeenkomsten uit te voeren. Bijvoorbeeld, de reguliere uitdrukking /The/gi betekent: hoofdletter T, gevolgd door kleine letter h, gevolgd door teken e. En aan het eind van de reguliere uitdrukking vertelt de vlag i de reguliere uitdrukkingsengine om de hoofdletters te negeren. Zoals u kunt zien hebben we ook de g vlag meegegeven omdat we willen zoeken naar het patroon in de gehele invoer string.

The => The fat cat sat on the mat.

Test de reguliere expressie

/The/gi => The fat cat sat on the mat.

Test de reguliere expressie

5.2 Globaal zoeken

De g modifier wordt gebruikt om een globale overeenkomst uit te voeren (alle overeenkomsten vinden in plaats van te stoppen na de eerste overeenkomst). Bijvoorbeeld, de reguliere uitdrukking /.(at)/g betekent: elk teken behalve nieuwe regel, gevolgd door het kleine teken a, gevolgd door het kleine teken t. Omdat we de g vlag aan het eind van de reguliere uitdrukking hebben gezet, zal deze nu alle overeenkomsten in de invoerstring vinden, niet alleen de eerste (wat het standaard gedrag is).

/.(at)/ => The fat cat sat on the mat.

Test de reguliere uitdrukking

/.(at)/g => The fat cat sat on the mat.

Test de reguliere uitdrukking

5.3 Multiline

De m modifier wordt gebruikt om een multi-line overeenkomst uit te voeren. Zoals we eerder hebben besproken
worden ankers (^, $) gebruikt om te controleren of het patroon het begin of het einde van de invoerstring is. Maar als we willen dat ankers op elke regel werken, gebruiken we de vlag
m. Bijvoorbeeld, de reguliere uitdrukking /at(.)?$/gm betekent: kleine letters
teken a, gevolgd door kleine letters t, optioneel alles behalve
nieuwe regel. En vanwege de vlag m past de reguliere expressie-engine het patroon toe aan het eind van elke regel in een string.

/.at(.)?$/ => The fat
cat sat
on the mat.

Test de reguliere expressie

"/.at(.)?$/gm" => The fat
cat sat
on the mat.

Test de reguliere expressie

Greedy vs lazy matching

In de standaardinstelling past regex greedy toe, dat wil zeggen dat het zo lang als
mogelijk is overeenkomt. We kunnen ? gebruiken om op een luie manier te matchen, dat wil zeggen zo kort mogelijk

/(.*at)/ => The fat cat sat on the mat.

Test de reguliere expressie

/(.*?at)/ => The fat cat sat on the mat.

Test de reguliere expressie

En daarmee komt deze post tot een einde. Ik hoop dat deze post nuttig was. Zorg ervoor dat je oefent wat je geleerd hebt met diensten als regexr.com of regex101.com.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.