Reguliere expressies voor noobs en andere newbies
Zoeken en vervangen ken je al van hele woorden of zinnenmaar als je iets zoekt waarvan je niet weet hoe het eruit ziet dan wordt het lastiger
bijvoorbeeld zoek een e-mail adres of een hyperlink of een achternaam etc.
Zoeken naar structuren in teksten doe je met reguliere expressies,
die lijken altijd heel moeilijk omdat er zulke rare tekens gebruikt worden.
Dat is logisch omdat de dingen die je zoekt uit leesbare tekst bestaan!
Dit document is er niet als leerboek bedoeld , maar als naslagwerk / spiekbriefje.
Als je een reguliere expressie hardop voorleest en je gebruikt de juiste begrippen dan vertelt het verhaal zichzelf.
Waar kun je naar zoeken? (karakter klassen) | |
\s | een teken dat geen inkt kost (spatie, tab, nieuwe regel) (\S alle tekens die je kunt printen) |
\d | cijfer (\D alles behalve cijfers) |
\w | woord (alles tussen spaties, begin van een regel, eind van een regel) |
hallo | Letterlijke tekens (case sensitive tenzij de /i (insensitive) wordt gebruikt) |
[a-z] [A-Z] [0-9] [aeiouy] | groepen van toegestane tekens (bv onderkast klinkers) of het tegenovergestelde ([^a-z] [^A-Z] [^0-9] [^aeiouy]) |
(hallo | hoi) | groepen van toegestane tekencombinaties (hallo of hoi) |
. | elk teken behalve nieuwe regel (tenzij /s (single line) wordt gebruikt) |
Hoeveel matches? (quantifiers) | |
* | 0 maal of vaker (komt misschien voor) |
+ | 1 maal of vaker (komt zeker voor) |
? | 0 of 1 maal (zo min mogelijk) |
{3} | precies 3 maal |
{3,} | 3 maal of vaker |
{3,5} | 3,4 of 5 maal |
Groepen | |
(xxxx) | een groep die wordt opgeslagen in een variabele of $1 of een hoger getal |
(?:xxxxx) | een groep die niet wordt opgeslagen in een variabele |
Escaping | |
\ | escape |
^()[]{}.*+?\|/<> | tekens die ge-escaped moeten worden als je ze letterlijk wilt vinden, omdat ze een betekenis kunnen hebben binnen reguliere expressies |
Modifiers | |
g | global |
i | case insensitive |
s | alles als 1 regel beschouwen (dus zonder newlines) |
Voor iets meer gevorderden: | |
^ of \A | begin van een regel |
$ of \Z | eind van een regel |
\< | begin van een woord |
\> | eind van een woord |
Nog een paar | |
$` | voor de match |
$' | na de match |
$& | de hele match |
?# | comment (als /x gebruikt wordt) |
Betere tekstverwerkers/editors, php, javascript maar vooral PERL kunnen razendsnel documenten met reguliere expressie doorzoeken.
Grep of egrep doen dat met hele bestanden tegelijk.
Maar reguliere expressie zijn heel krachtig en kunnen dus in een mum van tijd een enorme chaos aanrichten!
Als een regex niet doet wat jij verwacht is daar altijd een logische verklaring voor, een regex werkt altijd!