I wil graag het nummer uit de tekst halen. Ik gebruik momenteel onderstaande code. Ik wil onderstaande code zo aanpassen dat deze alleen het nummer pakt als het niet in een woord staat.
Voorbeeld1:
"User: Om maar 1 voorbeeld te noemen"
(onderstaande code zal 1 eruit halen)
Voorbeeld2:
"User09: Om maar 1 voorbeeld te noemen"
(onderstaande code zal 09 eruit halen. Dit moet 1 zijn...)
Je hebt hier de basis regex /\d+/ die we in het begin ook hadden. Dan heb je 2 aparte groepen (?<!...) en (?!...) dit zijn negatieve lookbehinds/lookaheads.
Het doel hiervan is eigenlijk best simpel. Met lookbehind geef je aan wat je wilt dat er voor je matched string staat. Bijv. dit:
/(?<A)\w+/
Dit zal een heel woord matchen die begint met een A.
Maar zul je denken dit kun je toch ook zo doen:
/A\w+/
Ja, alleen zit er 1 groot verschil in. Met een lookbehind/lookahead neem je hetgeen je erin zet niet mee in de match. Voorbeeld:
<?php
$str = 'hello';
preg_match('/h\w+/', $str); // matched hello
preg_match('/(?<h)\w+/', $str); // matched ello als ervoor een h staat
?>
Een negative lookbehind/lookahead zoals ik in die regex gebruikte zeg je dit mag er niet voor staan. Dus in dit geval zeg ik match meerdere getallen (\d+) als die niet direct voor en niet direct na een woord staan.