Как сопоставить фиксированное количество цифр с регулярным выражением в PHP? - PullRequest
4 голосов
/ 25 марта 2010

Я хочу получить 8 последовательных цифр из строки.

"hello world,12345678anything else"

должен вернуть 12345678 как результат (пробел между ними необязателен).

Но это ничего не должно возвращать:

"hello world,123456789anything else"

Поскольку он состоит из 9 цифр, мне нужно только 8 цифр.

Ответы [ 3 ]

10 голосов
/ 25 марта 2010

Попробуйте

'/(?<!\d)\d{8}(?!\d)/'
0 голосов
/ 25 марта 2010

Вы должны соответствовать материалу по обе стороны от 8 цифр. Вы можете сделать это с помощью проверочных утверждений нулевой ширины, как показано на примере @S Mark, или вы можете выбрать более простой путь - просто создать обратную ссылку для 8 цифр:

preg_match('/\D(\d{8})\D/', $string, $matches)
$eight_digits = $matches[1];

Но это не будет совпадать, когда цифры начинают или заканчивают строку или строку; для этого нужно немного уточнить это:

preg_match('/(?:\D|^)(\d{8})(?:\D|$)/', $string, $matches)
$eight_digits = $matches[1];

(?:...) в этом позволяет вам указать подмножество альтернатив, используя |, не считая совпадение как обратную ссылку (т.е. добавляя его к элементам в массиве $matches).

Для получения более подробной информации о богатом и тонком языке, который является Perl-совместимым синтаксисом регулярных выражений, см. http://ca3.php.net/manual/en/reference.pcre.pattern.syntax.php

0 голосов
/ 25 марта 2010
$var = "hello world,12345678798anything else";
preg_match('/[0-9]{8}/',$var,$match);
echo $match[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...