2011-09-21 16 views
6

qualcuno può aiutarmi con l'algoritmo per trovare la posizione della prima occorrenza di un numero qualsiasi nella stringa?Trova la posizione della prima occorrenza di qualsiasi numero in stringa (php)

codice che ho trovato su web e non funziona:

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

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

+0

Inoltre, trovo utile usare un "regex python" repl in linea per testare ed eseguire il debug delle espressioni regex. Ad esempio: https://pythex.org – SherylHohman

risposta

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

dovrebbe funzionare per questo. Il codice originale richiedeva il - prima del primo numero, forse era questo il problema?

+0

se non c'è un numero nella stringa restituisce la lunghezza della stringa originale? – Gasper

+0

@ gašper: Giusto. Può essere risolto, ma la soluzione di Stanislav è molto meglio. –

+0

Perché la sua soluzione è migliore? se non c'è numero nella stringa, mi restituisce 1 (con il suo algoritmo). se uso il tuo mi restituisce qualcosa di logico (lunghezza della stringa). – 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

Ha più senso. I (e RegexBuddy) non sapevano di 'PREG_OFFSET_CAPTURE' :) –

0

posso fare le espressioni regolari, ma devo andare in uno stato alterato di ricordare quello che fa dopo che ho codificato esso.

Ecco una semplice funzione PHP è possibile utilizzare ...

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 
} 
Problemi correlati