I want to extract 8 digit number from string using regex.
Test strings are
hi 82799162
,236232 (82342450)
,test data 8979
Required respective output should be
82799162
,82342450
,null
I have tried following codes:
preg_match('/[0-9]{8}$/', $string, $match);
preg_match('/\d{8}$/', $string, $match);
But it does not retrieve the number from 236232 (82342450)
.
The problem is with your $
sign, and it is used to indicate the end of your expression. So basically, with that expression, you are looking for a string which ends with a 8 digit number. But in your second test string; '236232 (82342450)'
, ends with a bracket, and therefore it doesn't match the criteria (does not end with a number).
So remove the trailing $
and it will work.
preg_match('/[0-9]{8}/',$string,$match);
Hope it helps!!
If a regex is to capture exactly 8 digits, is must contain:
\d{8}
as a central part,One of possible solutions is to use negative lookbehind / lookahead:
(?<!\d)\d{8}(?!\d)
Another option is word boundary assertions (at both ends):
\b\d{8}\b
I think, regex like [0-9]{8}
is not enough, as it captures also first 8 digits from a longer sequence of digits. Are you happy with that?