PHP regex basamak sabit sayıda maç nasıl?

2 Cevap php

Ben bir dize dışında ardışık 8 basamak almak istiyorum.

"hello world,12345678anything else"

Sonuç olarak 12345678 dönmelidir (arasındaki boşluk isteğe bağlıdır).

Ama bu şey iade etmemelidir:

"hello world,123456789anything else"

Bu 9 basamak var çünkü, ben sadece 8 haneli birim gerekir.

2 Cevap

Denemek

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

Sen 8 basamak iki tarafında şeyler eşleşmesi gerekir. @ S Mark örneklediği gibi, sıfır genişliği göz etrafında iddialar ile yapabilirsiniz, ya da sadece 8 haneli bir geribaşvuru yaratma basit yol alabilir:

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

Basamak başlatmak veya bir çizgi ya da dize sonuna Ama bu maç olmayacak; Bunun için bunu biraz ayrıntılı gerekir:

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

(?:...) bu bir size, yani dizideki {[elemanların ekleyerek (bir arka referans olarak maçı sayma olmadan, | kullanılarak, dönüşümlü bir alt kümesini belirtmek için izin verir (2)]}).

Perl uyumlu düzenli ifade sözdizimi zengin ve ince bir dil daha birçok kanlı ayrıntılar için bkz http://ca3.php.net/manual/en/reference.pcre.pattern.syntax.php