Home » Software Windows (Free) » Regularexpressions 101



Regularexpressions 101




Met regullar expressions 101 kunt u de patronen beschrijven die op elkaar lijken. Bijvoorbeeld, u hebt meerdere <img>tags en u wilt al deze afbeeldingen naar de imagesmap verplaatsen:


<img src="9.png"> → <img src="afbeeldingen/9.png">

<img src="10.png"> → <img src="afbeeldingen/10.png">

en zo verder

U kunt eenvoudig een reguliere expressie schrijven die overeenkomt met alle bestandsnamen die uit getallen bestaan en vervolgens al deze tags in één keer vervangen.


Basis syntaxis

Als u een van de alternatieven moet matchen , gebruikt u een afwisseling (verticale balk). Bijvoorbeeld:


Reguliere expressie    Betekenis

a|img|h1|h2    ofwel, aof img, of h1, ofh2

Bij het gebruik van afwisseling moet u vaak tekens groeperen ; u kunt dit doen met haakjes. Als u bijvoorbeeld een HTML-tag wilt matchen, werkt deze aanpak niet:


Reguliere expressie    Betekenis

<h1|h2|b|i>    <h1of h2(zonder de hoekige haken) of bofi>

omdat <geldt alleen voor het eerste alternatief en >geldt alleen voor het laatste. Om de hoekige haakjes op alle alternatieven toe te passen, moet u de alternatieven groeperen:


<(h1|h2|b|i)>

De laatste primitieve (ster) laat je alles nul of meer keer herhalen . Je kunt het op één teken toepassen, bijvoorbeeld:


Reguliere expressie    Betekenis

a*    een lege string, a, aa, aaa, aaaa, etc.

U kunt het ook toepassen op meerdere tekens tussen haakjes:


Reguliere expressie    Betekenis

(ab)*    een lege string, ab, abab, ababab, abababab, etc.

Houd er rekening mee dat als u de haakjes verwijdert, de ster alleen op het laatste teken wordt toegepast:


Reguliere expressie    Betekenis

ab*    een lege string, ab, abb, abbb, abbbb, etc.

Een portret van Stephen Cole Kleene, de uitvinder van de reguliere expressie

Stephen Kleene (1909-1994), de uitvinder van reguliere expressies.

Auteur: Konrad Jacobs. Bron: Archief van het Mathematisches Forschungsinstitut Oberwolfach.

De ster is vernoemd naar de Amerikaanse wiskundige Stephen Kleene , die in de jaren 50 reguliere expressies uitvond. Deze kan een lege string matchen, maar ook een willekeurig aantal herhalingen.


Deze drie primitieven (alternatie, haakjes en de ster voor herhaling) zijn voldoende om elke reguliere expressie te schrijven, maar de syntaxis kan omslachtig zijn. U kunt nu bijvoorbeeld een regex schrijven voor het matchen van bestandsnamen die getallen zijn in een <img>tag:


Reguliere expressie    Betekenis

(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*    een of meer cijfers

(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*    een positief geheel getal (nul mag niet als eerste teken worden gebruikt)

De haakjes kunnen onbeperkt worden genest, bijvoorbeeld:


Reguliere expressie    Betekenis

(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(,(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*)*    een of meer positieve gehele getallen, gescheiden door komma's

Handige snelkoppelingen voor karakterklassen

Je kunt elke regex schrijven met de drie primitieven, maar het wordt snel moeilijk om te lezen, dus er zijn een paar snelkoppelingen uitgevonden. Wanneer je een van de genoemde tekens moet matchen , zet ze dan tussen vierkante haken:


Reguliere expressie    Kortere regex    Betekenis

a|e|i|o|u|y    [aeiouy]    een klinker

0|1|2|3|4|5|6|7|8|9    [0123456789]    een cijfer

0|1|2|3|4|5|6|7|8|9    [0-9]    een cijfer

a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z    [a-z]    een brief

Zoals u kunt zien, is het mogelijk om alleen het eerste en het laatste toegestane teken te specificeren als u er een streepje tussen plaatst. Er kunnen meerdere van dergelijke bereiken tussen vierkante haken staan:


Reguliere expressie    Betekenis

[a-z0-9]    een letter of een cijfer

[a-z0-9_]    een letter, een cijfer of het onderstrepingsteken

[a-f0-9]    een hexadecimaal cijfer

Er zijn een aantal vooraf gedefinieerde tekenklassen die nog korter zijn om te schrijven:


Reguliere expressie    Betekenis

\s    een spatieteken: de spatie, het tabteken, de nieuwe regel of de wageninvoer

\d    een cijfer

\w    een woordteken (een letter, een cijfer of het onderstrepingsteken)

.    elk karakter

In Aba Search and Replace bevatten deze tekenklassen Unicode-tekens zoals geaccentueerde letters of Unicode-regeleinden. In andere regex-dialecten bevatten ze meestal alleen ASCII-tekens, dus \dis meestal hetzelfde als [0-9]en \wis hetzelfde als [a-zA-Z0-9_].


De character classes voegen geen nieuwe mogelijkheden toe aan de reguliere expressies; u kunt gewoon alle toegestane tekens met een afwisseling opsommen, maar een character class is veel korter om te schrijven. We kunnen nu een kortere versie van de eerder genoemde regex schrijven:


Reguliere expressie    Betekenis

[1-9][0-9]*(,[1-9][0-9])*    een of meer positieve gehele getallen, gescheiden door komma's

Herhalingen

Een Kleene-ster betekent "nul of meer keer herhalen", maar vaak heb je nog een aantal herhalingen nodig. Zoals eerder getoond, kun je een regex gewoon kopiëren en plakken om het twee of drie keer te herhalen, maar daar is een kortere notatie voor:


Reguliere expressie    Kortere regex    Betekenis

\d\d*    \d+    een of meer cijfers

(0|1)(0|1)*    [01]+    elk binair getal (bestaande uit nullen en enen)

(\s|)    \s?    ofwel een spatie of niets

http(s|)    https?    httpofwel ofhttps

(-|\+|)    [-+]?    het minteken, het plusteken of niets

[a-z][a-z]    [a-z]{2}    twee kleine letters

[a-z][a-z]((([a-z]|)[a-z]|)[a-z]|)    [a-z]{2,5}    van twee tot vijf kleine letters

[a-z][a-z][a-z]*    [a-z]{2,}    twee of meer kleine letters

Er zijn dus de volgende herhalingsoperatoren:


een Kleene-ster *betekent dat deze nul of meer keer herhaald wordt, en kan dus nooit overeenkomen, maar kan één keer, twee keer, drie keer, etc. overeenkomen;

een plusteken +betekent dat het een of meerdere keren herhaald wordt, dus het moet minstens één keer overeenkomen;

een optioneel onderdeel ?betekent nul keer of één keer ;

accolades {m,n}betekent herhalen van m tot n keer .

Merk op dat u elke herhaling kunt uitdrukken met de accolades, zodat deze operatoren elkaar gedeeltelijk dupliceren. Bijvoorbeeld:


Reguliere expressie    Kortere regex    Betekenis

\d{0,}    \d*    niets of een paar cijfers

\d{1,}    \d+    een of meer cijfers

\s{0,1}    \s?    ofwel een spatie of niets

Net als de Kleene-ster kunnen de andere herhalingsoperatoren worden toegepast op haakjes, zodat u ze onbeperkt kunt nesten.


Ontsnappen

Als u een van de speciale tekens zoals haakjes, verticale balk, plus of ster moet matchen , moet u ze escapen door er een backslash \voor te plaatsen. Om bijvoorbeeld een getal tussen haakjes te vinden, gebruikt u \(\d+\).


Een veelgemaakte fout is om een backslash voor een punt te vergeten. Let op: een punt betekent elk teken, dus als u example.comin een reguliere expressie schrijft, zal het matchen examplexcomof iets dergelijks, wat zelfs een beveiligingsprobleem in uw programma kan veroorzaken. Nu kunnen we een regex schrijven om de <img>tags te matchen:


<img src="\d+\.png">

Dit komt overeen met alle bestandsnamen die uit cijfers bestaan en we hebben de punt correct geëscaped.


Andere kenmerken

Moderne regex engines voegen meer features toe, zoals backreferences of conditionele subpatronen. Wiskundig gezien behoren deze features niet tot de reguliere expressies; ze beschrijven een niet-reguliere taal, dus je kunt ze niet vervangen door de drie primitieven.




WW: Softtrack
Log in om te downloaden

Beste bezoeker, u bent op de site gekomen als niet-geregistreerde gebruiker. We raden je aan te registreren

Information

Users of Gasten are not allowed to comment this publication.