De beginnershandleiding voor reguliere expressies
Heb je ooit geprobeerd een terugkerend patroon in een stuk tekst te vinden? Je hebt misschien iets als de zoekfunctie in je browser of tekstverwerker gebruikt, maar wanneer je iets complexer moet vinden, kan het zijn als het vinden van een speld in de spreekwoordelijke hooiberg.
Gelukkig is er een manier om precieze patronen in de tekst uit te plukken tot aan het personage. Het wordt reguliere expressies genoemd en het laat je een meester worden in het doorzoeken van tekst.
Als je helemaal aandacht hebt besteed aan Linux-hulpprogramma's, merk je waarschijnlijk dat ze vaak gebruikmaken van iets dat reguliere expressies wordt genoemd. Hoewel Unix en Linux ze populair hebben gemaakt, zijn reguliere expressies beschikbaar in verschillende pakketten, waaronder Microsoft Word.
Reguliere expressies worden het meest gebruikt in verschillende opmerkelijke Linux-programma's, waaronder grep (wat staat voor Global Regular Expression Print), Awk en Sed.
Het is beter om reguliere uitdrukkingen te beschouwen als een kleine taal, waarvan de basis in een kleine ruimte kan worden beschreven.
U kunt zoeken met behulp van hulpmiddelen zoals Grep of Ack van de standaardinvoer of een tekstbestand.
Als u bijvoorbeeld probeert de term 'Firefox' te vinden in de uitvoer van de opdracht ps, kunt u het volgende doen:
ps | grep firefox
En hier is hoe u de term "maketecheasier" in een bestand zou vinden.
grep maketecheasier somefile
metatekens
In reguliere expressies kunt u ook naar delen van een tekenreeks zoeken. De manier waarop je dit zou doen, is met twee karakters. Ze worden eigenlijk metatekens genoemd. Ze lijken op de jokertekens die u mogelijk in de shell hebt gebruikt.
- "." Staat voor een enkel teken. Het patroon "ct" komt overeen met bijvoorbeeld de woorden "cat", "cut" en "cot".
- Het metateken "*" betekent dat het vorige teken 0 of vaker wordt gevonden. Het patroon "l. * X" zou "linux" vinden, evenals alle andere woorden die in hetzelfde patroon pasten.
De reden dat u zoiets als "l*x"
net zo kunt gebruiken als in de shell, is omdat het matchen van 0 of meer tekens betekent dat er lijnen worden gevonden die geen "l" hebben gevolgd door een ander teken. Met andere woorden, elke regel die wordt gematcht, is absoluut nutteloos.
Patronen vinden aan het begin of het einde
Je kunt ook patronen vinden aan het begin of aan het einde van de regels.
- Het teken "^" komt overeen met het begin
- De "$" kwam overeen met het einde.
Bijvoorbeeld: "sier$"
zou overeenkomen met "Maak technologie gemakkelijker" en "^Make"
zou overeenkomen met "Maken".
Match zoeken in een bereik
Je kunt ook in meer gecompliceerde karakters komen. Alles dat u tussen vierkante haken plaatst, wordt als een bereik vergeleken. " [az]
" komt bijvoorbeeld overeen met alle kleine letters. " [a-zA-Z]
" komt overeen met alle letters. " [a-zA-Z0-9]
" komt overeen met alfanumerieke tekens. Binnenin de haakjes ontkracht het teken "^" alles. " [^a-zA-Z]
" komt overeen met alles dat geen letter is.
U kunt ook woordgrenzen vinden met de tekens ' \<
' en ' \>
'. Het patroon " \
" komt natuurlijk overeen met "Linux".
Je kunt iets een bepaald aantal keren matchen met accolades. " {3}
" komt iets overeen met drie keer en " {3, 5}
" komt overeen met iets tussen 3 en 5 keer.
Met deze eenvoudige bouwstenen kun je een aantal behoorlijk ingewikkelde dingen matchen. Reguliere expressies zijn veel meer dan in een kort artikel kan worden uitgelegd. Als je een uitgebreide boek-lengte behandeling van het onderwerp wilt, moet je zeker Mastering Regular Expressions bekijken door Jeffrey EF Friedl.
Openbaarmaking: dit artikel bevat een geaffilieerde link. Hoewel we alleen schrijven over producten die volgens ons verdienen om op deze site te staan, kan Make Tech Easier een kleine commissie verdienen als u doorklikt en het product in kwestie koopt.
Afbeelding Krediet: xkcd