PHP: strpos () kullanarak sadece iğneyi bulmak için

3 Cevap php

Ben samanlıkta iğne bulmak için () strpos kullanıyorum. Ama, ben sadece aynı dize uzunluğu ile iğne bulmak istiyorum. Örneğin:

$mystring = '123/abc';
$findme   = 'abc';
$pos = strpos($mystring, $findme); // THIS IS FINE

$mystring = '123/abcdefghijk';
$findme   = 'abc';
$pos = strpos($mystring, $findme); // THIS IS NOT FINE

Yani, ben buldum dize dize uzunluğunu kontrol ve aynı uzunlukta olup olmadığını görmek için iğne için bu maç gerekir. Yani, 123/abc doğru abc maçlar, ama çok daha uzun 3 karakterden daha çünkü ben 123/abcdefghijk abc maç istemiyorum.

3 Cevap

Soru ('123 / abc 'de uzun 3 karakterden daha açıkça!) Oldukça muğlak olduğunu, ama bir negatif endeksi ile substr_compare() arıyor olabilir.

Eğer bölü, yani önemli olan söylüyorsunuz. bu çizgi ayrılmış belirteçleri bir dizi biridir zaman sadece iğne maç istiyorum?

Eğer öyleyse, regex deneyebilirsiniz ya:

preg_match('/(^|\/)abc($|\/)/', $mystring, $matches, PREG_OFFSET_CAPTURE);
$pos= FALSE;
if (count($matches)>=1)
    $pos= $matches[0][1];

Veya bölü bölünmüş ve ayrı bir dize parçaları ile çalışmak:

$parts= explode('/', $mystring);
$pos= array_search($parts, 'abc');
if ($pos!==FALSE)
    $pos= count(implode('/', array_slice($parts, 0, $pos)));

Regex muhtemelen biraz daha hızlıdır. Eğer regex-özel karakterler içerebilir keyfi çizgi ayrılmış dizeleri maç gerekiyorsa Ama ikincisi daha iyi bir hareket olacaktır.