Wat is een Regex (reguliere expressie)?

Afkorting voor reguliere expressie, een regex is een reeks tekst waarmee u patronen kunt maken die tekst helpen matchen, lokaliseren en beheren. Perl is een geweldig voorbeeld van een programmeertaal die gebruik maakt van reguliere expressies. Het is echter slechts één van de vele plaatsen waar u reguliere expressies kunt vinden. Reguliere expressies kunnen ook worden gebruikt vanaf de opdrachtregel en in teksteditors om tekst binnen een bestand te vinden.

Wanneer je eerst probeert om reguliere expressies te begrijpen, lijkt het alsof het een andere taal is. Het beheersen van reguliere expressies kan u duizenden uren besparen als u met tekst werkt of grote hoeveelheden gegevens moet analyseren. Hieronder ziet u een voorbeeld van een reguliere expressie waarbij elk van de componenten is gelabeld. Deze reguliere expressie wordt ook getoond in de Perl-programmeervoorbeelden die later op deze pagina worden getoond.

De basis van reguliere expressies (spiekbriefje)

Kijkend naar het bovenstaande voorbeeld kan overweldigend zijn. Wanneer u echter de basissyntaxis begrijpt van hoe reguliere expressieopdrachten werken, kunt u het bovenstaande voorbeeld lezen alsof u deze zin aan het lezen bent. Helaas gebruiken niet alle programma's, opdrachten en programmeertalen dezelfde reguliere expressies, maar ze delen allemaal overeenkomsten.

KarakterWat doet het?VoorbeeldWedstrijden
^Komt overeen met het begin van de regel^ abcabc, abcdef .., abc123
$Komt overeen met het einde van de regelabc $mijn: abc, 123abc, theabc
.Overeenkomen met elk karakteracabc, asg, a2c
|OF-operatorabc | xyzabc of xyz
(...)Leg alles vast wat overeenkomt(abc)Legt 'a' en 'c' vast
(:? ...)Niet-vastleggende groep(abc)Vangt 'a' maar alleen groepen 'c'
[...]Komt overeen met alles tussen haakjes[abc]a, b of c
[^ ...]Komt overeen met alles dat niet tussen haakjes staat[^ Abc]xyz, 123, 1de
[Az]Komt overeen met tekens tussen 'a' en 'z'[Bz]bc, mind, xyz
{X}Het exacte 'x'-aantal keren dat een overeenkomst moet worden bereikt(Abc) {2}abcabc
{X, }Combineer 'x' aantal keren of meer(Abc) {2}abcabc, abcabcabc
{X, y}Overeenkomen tussen 'x' en 'y' tijden.(A) {2, 4}aa, aaa, aaaaa
*Hebzuchtige match die overeenkomt met alles in plaats van de *abcabc, abbcc, abcdc
+Komt overeen met het karakter vóór + een of meerdere kerena + cac, aac, aaac,
?Komt het karakter overeen met het? nul of één keer. Ook gebruikt als een niet-hebzuchtige matchabcac, abc
\Ontsnap aan het personage na de backslash of maak een escape-reeks.a \ scac

Escape-tekens (escape-reeks)

Opmerking: escape-tekens zijn hoofdlettergevoelig.

KarakterWat doet het?
\Elk teken dat hieronder niet wordt vermeld, voorafgegaan door een \ zal worden geëscaped. Bijvoorbeeld, \. komt overeen met een punt en voert de bovengenoemde functie niet uit. Tekens die moeten worden geëscaped, zijn () [] {} ^ $. | * +? \
\ 0Null karakter
\eenOvereenkomen met een bel of alarm.
\ bWoordgrens in de meeste of backspace
\ BNiet-woordgrens
\ dOvereenkomen met een decimaal cijfer (0-9)
\ DOvereenkomen met een niet-cijfer
\ eMatch een ontsnapping
\ fOvereenkomen met een formulierfeed
\ nZoek een nieuwe lijn
\ Q ... \ ENegeert elke speciale betekenis in wat wordt gematcht.
\ rOvereenkomen met een carriage return
\ sKomt overeen met een spatie (spatie, \ t, \ r, \ n)
\ SKomt overeen met elk niet-witruimteteken
\ tZoek een overeenkomst op
\ vOvereenkomen met een verticaal tabblad
\ wKomt overeen met één woordwoord [a-zA-Z_0-9]
\ wKomt overeen met een willekeurig niet-woordteken

Reguliere expressievlaggen

Buiten de reguliere expressie (aan het einde) kunnen vlaggen worden gebruikt om te helpen bij het matchen van patronen.

KarakterWat doet het?
ikNegeer de zaak (hoofdletters en kleine letters toegestaan)
mMulti-line match
sPas nieuwe lijnen aan
XSpaties en opmerkingen toestaan
JDubbele groepsnamen toegestaan
UOngelijke match

Perl voorbeelden van reguliere uitdrukkingen voor programmeertaal

Hieronder staan ​​enkele voorbeelden van reguliere expressies en patroonafstemming in Perl. Veel van deze voorbeelden zijn vergelijkbaar of hetzelfde als andere programmeertalen en programma's die reguliere expressies ondersteunen.

 $ data = ~ s / slechte data / goede data / i; 

In het bovenstaande voorbeeld worden eventuele "slechte gegevens" vervangen door "goede gegevens" met een niet-hoofdlettergevoelige overeenkomst. Dus als de variabele $ data "Here is bad data" was, zou het "Here is good data" worden.

 $ data = ~ s / a / A /; 

Dit voorbeeld vervangt kleine letters a door een hoofdletter A. Dus als $ data "voorbeeld" was, zou het "exAmple" worden.

 $ data = ~ s / [az] / * /; 

Het bovenstaande voorbeeld vervangt een kleine letter, a tot en met z, met een asterisk. Dus als $ gegevens "Voorbeeld" was, zou het "E ******" worden.

 $ data = ~ s / e $ / es /; 

In dit voorbeeld wordt het $ -teken gebruikt, waarmee de reguliere expressie overeenkomt met de tekst vóór het einde van de tekenreeks. Dus als $ gegevens "voorbeeld" waren, zouden het "voorbeelden" worden.

 $ data = ~ s /\./!/; 

In het bovenstaande voorbeeld vervangen we een punt door een uitroepteken. Omdat de periode een metakarakter is als u alleen een periode zonder de \ (escape) hebt ingevoerd, wordt deze als een willekeurig teken behandeld. In dit voorbeeld, als $ gegevens "voorbeeld" waren. het zou "voorbeeld!" worden, maar als je de escape niet zou hebben, zou het elk karakter vervangen en "!!!!!!!!" worden

 $ data = ~ s / ^ e / E /; 

Ten slotte, in dit bovenstaande voorbeeld vertelt de hoofdletter (^) de reguliere expressie om alles aan het begin van de regel te matchen. In dit voorbeeld komt dit overeen met kleine letters e aan het begin van de regel en vervangt deze door een hoofdletter E. Als $ gegevens "voorbeeld" waren, zou dit "Voorbeeld" worden.

Tip: als u reguliere uitdrukkingen nog meer wilt onderzoeken in opdrachten zoals grep of reguliere expressies in programmeertaal, bekijk dan het O'Reilly-boek 'Regelmatige uitdrukkingen beheersen'.

Computerafkortingen, Escape-reeks, Expressie, Glob, Metakarakter, Programmeervoorwaarden, Tilde, Wildcard