Foros del Web » Programando para Internet » PHP »

recorrer cadena identificar numeros, agruparlos y guardarlos en una variable.

Estas en el tema de recorrer cadena identificar numeros, agruparlos y guardarlos en una variable. en el foro de PHP en Foros del Web. buenas tengo una cadena de caracteres en una variable $texto, el contenido de la variable es este [/roll 3d6] pero solo quiero identificar el "3" ...
  #1 (permalink)  
Antiguo 21/11/2011, 23:17
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
recorrer cadena identificar numeros, agruparlos y guardarlos en una variable.

buenas tengo una cadena de caracteres en una variable $texto, el contenido de la variable es este [/roll 3d6] pero solo quiero identificar el "3" y el "6" y guardarlos en una variable A y B luego si es algo así [/roll 3d12] guardar en la variable A el 3 y el la B el 12, como se aria para realizar tal operación ya que he visto que con strlen($texto) recorro la cadena pero no se como guardar el conjunto de numero primario y el conjunto de números secundario.. a ver si alguien me puede dar un mano con esto:
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #2 (permalink)  
Antiguo 21/11/2011, 23:38
 
Fecha de Ingreso: noviembre-2011
Ubicación: Morelia, Mich, México
Mensajes: 95
Antigüedad: 12 años, 5 meses
Puntos: 18
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

mm pues siemrpe van a ser NumeroALetraNumeroB ??

si es asi pues puedes hacerlo de esta forma (una solución rápida que se me ocurre por ahora)

Código PHP:
Ver original
  1. <?php
  2.  
  3.    $cadena = '[/roll 3d12]';
  4.    $pattern = "/.* (\d*)[a-z](\d*).*/i";
  5.    preg_match($pattern ,$cadena, $matches);
  6.    $a = $matches[1];
  7.    $b = $matches[2];
  8. ?>

hay varias soluciones, te pongo esta por ahora

saludos
__________________
Que de Cosas - Tienda En linea México

La Batalla Por tu cuerpo - Dietas|Rutinas|Entrenamientos|Salud
  #3 (permalink)  
Antiguo 22/11/2011, 00:12
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

la explicas por favor.
por que lo que entiendo es que busca son coincidencias. y pues puede que no coincida
en mi ejemplo puede tener la siguiente variaciones

/roll AdB

donde A y B pueden ser desde un numero simple de 0a9 o un conjunto de numero sea un ejemplo "11" o "157"
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #4 (permalink)  
Antiguo 22/11/2011, 00:41
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

un ejemplo de bastante complejo es el siguiente:

si la entrada es de texto es:

Cita:
/roll 3d12+6
el script debe recorrer la cadena de caracter, guardar el 3 en una variable A, guardar el 12 en una variable B y guardar el +6 en una variable C, la variable C puede llevar signos.
si alguien me puede ayudar indicándome como se captura cada variable utilisando el ejemplo:

Cita:
Iniciado por quedecosas Ver Mensaje
mm pues siemrpe van a ser NumeroALetraNumeroB ??

si es asi pues puedes hacerlo de esta forma (una solución rápida que se me ocurre por ahora)

Código PHP:
Ver original
  1. <?php
  2.  
  3.    $cadena = '[/roll 3d12]';
  4.    $pattern = "/.* (\d*)[a-z](\d*).*/i";
  5.    preg_match($pattern ,$cadena, $matches);
  6.    $a = $matches[1];
  7.    $b = $matches[2];
  8. ?>

hay varias soluciones, te pongo esta por ahora

saludos
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #5 (permalink)  
Antiguo 22/11/2011, 02:05
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

al final he terminado probando este script pero no se no lo hago funcionar.

Código PHP:
Ver original
  1. $pattern = "/.* (\d*)[a-z](\d*)+(\d*).*/i";
  2.     preg_match($pattern ,$harset, $matches);
  3.     $dices = $matches[1];
  4.     $side = $matches[2];
  5.     $modif = $matches[3];
  6.     $trf=0;
  7.     while($trf<=$dices){
  8.         $trf++;
  9.         $rolll=$rolll+mt_rand(1,$side);
  10.     }
  11.     $rolll=$rolll+$modif;
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #6 (permalink)  
Antiguo 22/11/2011, 13:26
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

estoy tratando de imprimir la variable final:
Código PHP:
Ver original
  1. $texto = "Ha sacado un roll de:<font color=\"red\"> ".$rolll."</font>" ;
ya que $ texto debo incluirlo en la base de datos para luego hacer la llamada he imprimirla pero solo me salen 0 y 1
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #7 (permalink)  
Antiguo 22/11/2011, 17:05
 
Fecha de Ingreso: noviembre-2011
Ubicación: Morelia, Mich, México
Mensajes: 95
Antigüedad: 12 años, 5 meses
Puntos: 18
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

Hola, pues pon exactamente que tipo de combinaciones existen para poderte ayudar con una expresión regular que cubra todas.

saludos
__________________
Que de Cosas - Tienda En linea México

La Batalla Por tu cuerpo - Dietas|Rutinas|Entrenamientos|Salud
  #8 (permalink)  
Antiguo 22/11/2011, 17:57
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

algo asi:

Cita:
y en tal caso que alguien siquiera hacer lo mismo extraer la los numeros de una cadena pero guardarlos en diferentes variables: sea el caso este:

Texto: /roll 3d12+6

Codigo (no me funciona)

Código PHP:
Ver original
  1. $pattern =/.* (\d*)[a-z](\d*)+(\d*).*/i”;
  2. preg_replace($pattern ,$harset, $matches);
  3. $dices = $matches[1];
  4. $side = $matches[2];
  5. $modif = $matches[3];// puede ser positivo o negativo
  6. $trf=0;
  7. while($trf<=$dices){
  8. $trf++;
  9. $rolll=$rolll+mt_rand(1,$side);
  10. }
  11. $rolll=$rolll+$modif;

guardo asi:

Código PHP:
Ver original
  1. $texto = "Ha sacado un roll de: “.$rolll.”" ;

y imprimo asi:

Código PHP:
Ver original
  1. echo$texto”;

me imprime 1 y 0 lol alguna idea?? creo que seria buen aporte resolverlo.
[/QUOTE]
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #9 (permalink)  
Antiguo 22/11/2011, 18:03
 
Fecha de Ingreso: noviembre-2011
Ubicación: Morelia, Mich, México
Mensajes: 95
Antigüedad: 12 años, 5 meses
Puntos: 18
Respuesta: recorrer cadena identificar numeros, agruparlos y guardarlos en una variab

Código PHP:
Ver original
  1. <?php
  2. $var = '[/roll 3d12]';
  3. $var2 = '/roll 3d12+6';
  4.  
  5. $pattern = "/.* (\d*)[a-z]*(\d*)([\+\-]?\d*).*/i";
  6.  
  7. preg_match($pattern ,$var2, $coincidencias);
  8.  
  9. print_r($coincidencias);
  10. ?>
__________________
Que de Cosas - Tienda En linea México

La Batalla Por tu cuerpo - Dietas|Rutinas|Entrenamientos|Salud

Etiquetas: numeros, variables, identificador, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:06.