2011-09-21 8 views
6

może ktoś mi pomóc z algorytmem do znalezienia pozycji pierwszego wystąpienia dowolnej liczby w ciągu?Znaleźć pozycję pierwszego wystąpienia dowolnej liczby w ciąg (php)

Kod Znalazłem go w internecie i nie działa:

function my_ofset($text){ 
    preg_match('/^[^\-]*-\D*/', $text, $m); 
    return strlen($m[0]); 
} 
echo my_ofset('[HorribleSubs] Bleach - 311 [720p].mkv'); 
+0

try preg_match ('/ [\ d] + /', $ text, $ m); – user269867

+0

Ponadto, przydatny jest internetowy "python repgex repl" do testowania i debugowania wyrażeń regex. Na przykład: https://pythex.org – SherylHohman

Odpowiedz

12
function my_ofset($text){ 
    preg_match('/^\D*(?=\d)/', $text, $m); 
    return isset($m[0]) ? strlen($m[0]) : false; 
} 

powinny działać w tej sprawie. Oryginalny kod wymagał, aby - pojawił się przed pierwszą liczbą, być może to był problem?

+0

jeśli nie ma numeru w ciągu zwraca długość oryginalnego napisu? – Gasper

+0

@ gašper: Dobrze. Można naprawić, ale rozwiązanie Stanislava jest znacznie lepsze. –

+0

Dlaczego jego rozwiązanie jest lepsze? jeśli nie ma liczby w łańcuchu, zwraca mi 1 (z jego algorytmem). jeśli użyję twojego, zwróci mi coś logicznego (długość łańcucha). – Gasper

18
function my_offset($text) { 
    preg_match('/\d/', $text, $m, PREG_OFFSET_CAPTURE); 
    if (sizeof($m)) 
     return $m[0][1]; // 24 in your example 

    // return anything you need for the case when there's no numbers in the string 
    return strlen($text); 
} 
+2

Ma więcej sensu. Ja (i RegexBuddy) nie wiedzieliśmy o "PREG_OFFSET_CAPTURE" :) –

0

mogę zrobić wyrażeń regularnych, ale muszę przejść w stan zmienionej do pamiętać, co robi po to mam zakodowane.

Oto prosta funkcja PHP można użyć ...

function findFirstNum($myString) { 

    $slength = strlen($myString); 

    for ($index = 0; $index < $slength; $index++) 
    { 
     $char = substr($myString, $index, 1); 

     if (is_numeric($char)) 
     { 
      return $index; 
     } 
    } 

    return 0; //no numbers found 
} 
Powiązane problemy