2011-09-21 12 views
6

¿alguien me puede ayudar con el algoritmo para encontrar la posición de la primera que ocurre de cualquier número en la cadena?Encuentra la posición de la primera aparición de cualquier número en cadena (php)

Código lo encontré en la web y no funciona:

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

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

+0

Además, me parece útil usar una "réplica en tiempo real de python" en línea para probar y depurar expresiones regex. Por ejemplo: https://pythex.org – SherylHohman

Respuesta

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

debe trabajar para ello. El código original requería un - antes del primer número, ¿tal vez ese era el problema?

+0

si no hay un número en la cadena, ¿devuelve la longitud de la cadena original? – Gasper

+0

@ gašper: Correcto. Se puede arreglar, pero la solución de Stanislav es mucho mejor. –

+0

¿Por qué es mejor su solución? si no hay un número en la cadena, me devuelve 1 (con su algoritmo). si uso el suyo me devuelve algo lógico (longitud de cadena). – 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

Tiene más sentido. I (y RegexBuddy) no sabían sobre 'PREG_OFFSET_CAPTURE' :) –

0

que pueda hacer las expresiones regulares, pero tengo que entrar en un estado alterado de recordar lo que hace después de haber codificado él.

Aquí es una simple función de PHP puede utilizar ...

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 
} 
Cuestiones relacionadas