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.
Karakter | Wat doet het? | Voorbeeld | Wedstrijden |
---|---|---|---|
^ | Komt overeen met het begin van de regel | ^ abc | abc, abcdef .., abc123 |
$ | Komt overeen met het einde van de regel | abc $ | mijn: abc, 123abc, theabc |
. | Overeenkomen met elk karakter | ac | abc, asg, a2c |
| | OF-operator | abc | xyz | abc 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 * | abc | abc, abbcc, abcdc |
+ | Komt overeen met het karakter vóór + een of meerdere keren | a + c | ac, aac, aaac, |
? | Komt het karakter overeen met het? nul of één keer. Ook gebruikt als een niet-hebzuchtige match | abc | ac, abc |
\ | Ontsnap aan het personage na de backslash of maak een escape-reeks. | a \ sc | ac |
Escape-tekens (escape-reeks)
Opmerking: escape-tekens zijn hoofdlettergevoelig.
Karakter | Wat 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 () [] {} ^ $. | * +? \ |
\ 0 | Null karakter |
\een | Overeenkomen met een bel of alarm. |
\ b | Woordgrens in de meeste of backspace |
\ B | Niet-woordgrens |
\ d | Overeenkomen met een decimaal cijfer (0-9) |
\ D | Overeenkomen met een niet-cijfer |
\ e | Match een ontsnapping |
\ f | Overeenkomen met een formulierfeed |
\ n | Zoek een nieuwe lijn |
\ Q ... \ E | Negeert elke speciale betekenis in wat wordt gematcht. |
\ r | Overeenkomen met een carriage return |
\ s | Komt overeen met een spatie (spatie, \ t, \ r, \ n) |
\ S | Komt overeen met elk niet-witruimteteken |
\ t | Zoek een overeenkomst op |
\ v | Overeenkomen met een verticaal tabblad |
\ w | Komt overeen met één woordwoord [a-zA-Z_0-9] |
\ w | Komt 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.
Karakter | Wat doet het? |
---|---|
ik | Negeer de zaak (hoofdletters en kleine letters toegestaan) |
m | Multi-line match |
s | Pas nieuwe lijnen aan |
X | Spaties en opmerkingen toestaan |
J | Dubbele groepsnamen toegestaan |
U | Ongelijke 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