Hallo, Ik als regExpressieBeet heb een probleem waar ik hulp bij kan gebruiken. Ik heb in een database tabel een veld met tekst, waarin altijd tussen vierkante haakjes twee getallen staan, gescheiden door een komma. dus bv:
"hallo daar [14.34555,22.52522] ik ben bert."
Hoe kan ik dmv een reguliere expressie deze twee getallen opvangen, om ze te gebruiken voor een berekening?
Een getal bestaat uit de cijfers 0 tot en met 9 en eventueel het teken . om de komma's te scheiden. Alles tussen [] in regex betekend dat het een van de tekens moet matchen dus [0-9] match eenmalig een teken 0, 1, 2, 3, ..., 9. Voor het gemak bestaat er \d, wat enkele decimal digit matched (dus 0-9).
Doormiddel van + geef je aan dat je 1 of meer moet matchen. \d+ matched dus 1 of meer getallen.
* matched 0 of meer, dus \d* kan niks matchen, maar ook 1 getal en ook 10000 getallen.
? matched 0 of 1. Dus \d? matched of 1 getal of geen getal.
De . betekend in regex elk teken, dus willen we de punt matchen dan moeten we deze escapen: \.
Voeg dit samen en we hebben de regex voor een getal dat eventueel decimalen kan hebben: \d+\.?\d* (minimaal 1 getal, gevolgt door optioneel een punt en eventueel nog meer getallen).
Nu willen we dit 2 keer doen met een komma ertussen: \d+\.?\d*,\d+\.?\d*
Vervolgens willen we beide getallen apart opslaan ("capture"), dit doe je door deze tussen haakjes te plaatsen: (\d+\.?\d*),(\d+\.?\d*)
We zijn bijna klaar, nu alleen nog zorgen dat we dit alleen matchen wanneer ze tussen blokhaken staan. Deze blokhaken hebben een betekenis in regex, dus moeten we ook deze escapen: \[ en \]
Voeg alles samen en je hebt: \[(\d+\.?\d*),(\d+\.?\d*)\]