| |||||||||||||
Reguliere expressies:Onderwerpen: |
Regular expressions - Deel 4
Deze pagina is op verzoek van een bezoeker teruggeplaatst. De pagina is echter vrij oud en bevat veel afwerkingsfoutjes. Gelieve hier rekening mee te houden. Quantifiers: hoeveelheidIn regexen kunnen we zeggen hoeveel keer iets mag of moet voorkomen. De volgende tekens dienen hier voor: {} ? + *Accolades: hoeveel keer iets mag voorkomen
/ab{7}c/
Dit betekent: het teken a, gevolgd door zeven keer het teken b, gevolgd door het teken c.Dus: als achter een teken een getal tussen accolades staat, wil dat zeggen dat dat teken zoveel keer moet voorkomen als het getal zegt (in dit voorbeeld geval 7 keer).Strings die voldoen aan het patroon:
/ab{4,9}c/
Dit betekent: het teken a, gevolgd door minimum 4 keer en maximum 9 keer het teken b, gevolgd door het teken c.
Strings die voldoen aan het patroon:
/ab{4,}c/
Strings die voldoen aan het patroon:
/ab{0,4}c/
Goed:
/x[defg]{1,4}y/
Goed:
/x[defg]{1,4}/
Met andere woorden: wat achter de [defg]{1,4} komt, laat ik volledig vrij.
"yyyxddddyyyyyyyyyyyyy" is een string die voldoet aan het patroon, en dat is logisch."yyyxddddddddddddddddd" is ook een string die voldoet aan het patroon. Hierdoor is "maximum 4 keer [defg]" misschien een verwarrende beschrijving. Er komen welliswaar meer dan 4 d's in voor, maar aan de voorwaarde van de regex is voldaan: in de string moet minimum 1 en maximum 4 keer [defg] voorkomen, en wat daar achter voorkomt hebben we het niet over, dus dat maakt niet uit. In dit voorbeeld is dat toevallig een hoop d's. Vraagteken: het voorgaande teken mag, maar moet nietHet vraagteken betekent: wat vlak voor het vraagteken staat, mag ofwel 0 keer voorkomen, ofwel 1 keer. Een vraagteken is dus hetzelfde als
{0,1}
Dus de volgende twee komen op hetzelfde neer:
/ab?c/
/ab{0,1}c/
Dit betekent: er moet eerst de letter a voorkomen, dan mag de letter b voorkomen, en dan moet de letter c voorkomen.Vraagteken kan in combinatie met zowat alles gebruikt worden, ook met bijvoorbeeld een punt:
/ab.?cd/betekent: eerst een a, dan een b, dan een willekeurig teken maar dat moet niet, dan een c, dan een d. Plus (+): 1 keer of meerEen plus (+) achter een teken, een groep, of een character class betekent dat hij minimum 1 keer, en maximum oneindig keer mag voorkomen. Een plus is dus hetzelfde als
{1,}
Bijvoorbeeld:
/ab+c/Dit betekent: een a, gevolgd door 1 of meer b's, gevolgd door een c. Sterretje (*): 0 keer of meerEen sterretje achter een teken, een groep, of een character class betekent dat dat teken minimum 0 keer, en maximum oneindig keer mag voorkomen. Als het dus niet voorkomt, is het ook OK. Een sterretje betekent dus hetzelfde als:
/{0,}/
Bijvoorbeeld:
/ab*c/Goed:
/De .* van de trap/Dit betekent: alles is goed waar "De " in voorkomt, gevolgd door eender wat (buiten iets met een nieuwe lijn), gevolgd door " van de trap".Goed:
Samenvatting
Meer heeft de voorkeurBij een quantifier neemt de regexp altijd zoveel als mogelijk. Dit is belangrijk om te weten als we delen tekst gaan wijzigen door middel van een regexp.Bijvoorbeeld:/a.*a/Hierbij zoekt de regex naar een a, dan neemt hij zoveel mogelijk tekens totdat hij een a tegenkomt. Dus als we de string "BCDEFGHIaJKLMNOPQRSaTUVWXYZBCDEaFGHIJKLMaNOPQaRST" hebben, zal hij "aJKLMNOPQRSaTUVWXYZBCDEaFGHIJKLMaNOPQa" vinden, en niet "aJKLMNOPQRSa".Quantifiers zijn dus gulzig, maar als dat toevallig niet zo handig is, kunnen we dat veranderen door een vraagteken te plaatsen achter de quantifier. Opmerking: een vraagteken achter een quantifier doet dus andere dingen dan een vraagteken achter iets anders! Als onze string dus nog steeds "BCDEFGHIaJKLMNOPQRSaTUVWXYZBCDEaFGHIJKLMaNOPQaRST" is, en we veranderen onze regexp tot: /a.*?a/Gaat hij dit vinden: "aJKLMNOPQRSa", en niet meer "aJKLMNOPQRSaTUVWXYZBCDEaFGHIJKLMaNOPQa"Hij gaat niet "aFGHIJKLMaNOPQa" vinden, want een regexp werkt altijd van links naar rechts. Volgende pagina: () ^$\A\Z |
||||||||||||
| Copyright (C) 2001-2006 Willem Penninckx | |||||||||||||