正则表达式 - 在字符串中查找8位数字[关闭]

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,
  • a "before" condition, ensuring that no digit occurs before your match,
  • an "after" condition, ensuring that no digit occurs after your match.

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?