2010-03-25 3 views
4

Я хочу получить последовательные 8 цифр из строки.Как сопоставить фиксированное количество цифр с регулярным выражением в PHP?

"hello world,12345678anything else" 

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

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

"hello world,123456789anything else" 

Потому что она имеет 9 цифр, нужно только блок 8 цифр.

ответ

10

Попробуйте

'/(?<!\d)\d{8}(?!\d)/' 
+0

Вы можете уточнить, что '(? user198729

+0

@ user198729, они выглядят позади и смотрят в будущее, '!' Означает нет, поэтому \ d не должен появляться до и после \ d {8}, для получения дополнительной информации см. Http: //www.regular-expressions .info/lookaround.html – YOU

+0

Они упоминаются как «утверждения обхода с нулевой шириной». Существует целый класс атомов RE, которые начинаются с '(?'; Из них в этом примере следуют '!', Чтобы указать, что они соответствуют тому, что происходит, пока оно не соответствует тому, что после '!', или ' intuited

0
$var = "hello world,12345678798anything else"; 
preg_match('/[0-9]{8}/',$var,$match); 
echo $match[0]; 
+0

Существует уже решение, почти точно такое, которое мы определили, не работает. – animuson

0

Вы должны соответствовать материал по обе стороны от 8 цифр. Вы можете сделать это с нулевой шириной просмотровых вокруг утверждений, о чем свидетельствует @S Марк, или вы можете взять простой маршрут просто создание обратной ссылки для 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-Compatible синтаксиса регулярных выражений, см http://ca3.php.net/manual/en/reference.pcre.pattern.syntax.php

Смежные вопросы