2010-11-30 49 views

Respuesta

6
$string = "12312313sdfsdf24234"; 
preg_match_all('/([0-9]+|[a-zA-Z]+)/',$string,$matches); 
print_r($matches); 

esto podría funcionar mucho mejor

+0

givng hacia fuera puesto matriz ( [0] => Array ( ) [1] => array ( ) [2] => array ( ) ) –

+0

cambia mi respuesta correctamente – Breezer

5
preg_match_all('/^(\d+)(\w+)$/', $str, $matches); 

var_dump($matches); 

$day = $matches[1][0]; 
$month = $matches[2][0]; 

Por supuesto, esto sólo funciona cuando sus cadenas son exactamente como se describe "abc123" (sin espacios en blanco anexa o antepuesto).

Si desea obtener todos los números y caracteres, puede hacerlo con una expresión regular.

preg_match_all('/(\d)|(\w)/', $str, $matches); 

$numbers = implode($matches[1]); 
$letters = implode($matches[2]); 

var_dump($numbers, $letters); 

See it!

+0

Esto supone que la cadena no será jan12 o fg1dg34sdf. –

+0

Gracias por redondear mi reputación derrotador anónimo. :) – alex

+0

Mi voto fue antes de que editaras tu respuesta. He deshecho mi voto. :) –

6
$numbers = preg_replace('/[^0-9]/', '', $str); 
$letters = preg_replace('/[^a-zA-Z]/', '', $str); 
+0

Parece correcto –

+0

[No necesita invocar el motor regex dos veces] (http://stackoverflow.com/questions/4311156/how-to-separate-letters-and-digits-from-a-string -in-php/4311202 # 4311202). – alex

+0

@alex, si es cuestión de velocidad, lo que publique es más rápido en mi prueba (100000 iteraciones).Yo creo que es más claro también. –

0

intenta esto:

$string="12jan"; 
$chars = ''; 
$nums = ''; 
for ($index=0;$index<strlen($string);$index++) { 
    if(isNumber($string[$index])) 
     $nums .= $string[$index]; 
    else  
     $chars .= $string[$index]; 
} 
echo "Chars: -$chars-<br>Nums: -$nums-"; 


function isNumber($c) { 
    return preg_match('/[0-9]/', $c); 
} 
+0

en algunas versiones es is_numeric() –

11

Usted puede hacer uso de preg_split para dividir la cadena en el punto que está precedida por dígitos, seguido por letras como:

$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str); 

Code in Action

<?php 
$str = '12jan'; 
$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);                                                                
print_r($arr); 

Resultado:

Array 
(
    [0] => 12 
    [1] => jan 
) 
+0

su código no funciona si hay espacio en blanco. '$ str = 12 Ene' al igual que –

+2

Si hay un espacio en blanco, ¿no sería más fácil explotar utilizando el espacio como delimitador? –

+0

@PrashantTapase solo agregue espacio en el juego de caracteres '[a-z]': '[\ sa-z]' – sglessard

0

Después de haber trabajado más con PHPExcel, tales operaciones son comunes. #Tapase ,. Aquí hay un preg_split que hace que quieras con espacio dentro de la cadena.

<?php 
$str = "12 January"; 
$tempContents = preg_split("/[\s]+/", $str); 
foreach($tempContents as $temp){ 
echo '<br/>'.$temp; 
} 
?> 

Usted puede agregar una coma al lado de la s de coma separados. Espero que ayude a alguien. Anton K.

1

Esto funciona para mí como por mi requerimiento, se puede editar de acuerdo con la suya

function stringSeperator($string,$type_return){ 

    $numbers =array(); 
    $alpha = array(); 
    $array = str_split($string); 
    for($x = 0; $x< count($array); $x++){ 
     if(is_numeric($array[$x])) 
      array_push($numbers,$array[$x]); 
     else 
      array_push($alpha,$array[$x]); 
    }// end for   

    $alpha = implode($alpha); 
    $numbers = implode($numbers); 

    if($type_return == 'number')  
    return $numbers; 
    elseif($type_return == 'alpha') 
    return $alpha; 

}// end function 
0
<?php 
$data = "#c1"; 
$fin = ltrim($data,'#c'); 
echo $fin; 
?> 
+2

Bienvenido a StackOverflow. Cuando responda una pregunta, explique su código en lugar de solo publicar el código. – yakatz

+0

pensé que era simple y claro, ¡está bien! si usas ltrim() puedes eliminar algunos charcters de la izquierda de tu cadena, por ejemplo, quité #c de toda la cadena, por lo que quedarás fuera con 1 –

+0

si haces que incluso agregues la salida que se te agregará puede incluso ++ $ fin y obtener la respuesta como dos –

Cuestiones relacionadas