Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Duda con string

Estas en el tema de Duda con string en el foro de PHP en Foros del Web. Hola a todos muchachos ... espero se encuentren muy bien.... uds siempre me ayudan cada vez que tengo una duda espero que no sea la ...
  #1 (permalink)  
Antiguo 10/01/2014, 13:20
 
Fecha de Ingreso: julio-2011
Ubicación: Santiago, Chile.
Mensajes: 95
Antigüedad: 13 años, 4 meses
Puntos: 4
Pregunta Duda con string

Hola a todos muchachos ...
espero se encuentren muy bien.... uds siempre me ayudan cada vez que tengo una duda espero que no sea la excepcion ya que siempre aprendo mas gracias a uds..
bueno iré al grano....
Tengo una cadena bastante larga que me trae un dato especifico.. por ejemplo

"WO : SWAP DE GABINETE EN USA097"

el tema es que necesito obtener del string solamente el codigo subrayado... pero el problema no seria grande si siempre estuviera en la misma posicion.
el problema es que puede estar posicionado en cualquier lado.
como por ejemplo:

"WO : SWAP USA097 DE GABINETE"
"WO : SWAP DE USA097 GABINETE "
"USA097 WO : SWAP DE GABINETE "

entonces no se como puedo obtener el codigo del string.

cabe mencionar que el codigo puede contar con 3 letras y 3 numeros o 2 letras y 3 numeros.

EJ : - AAA123
- AV222





muchas gracias de antemano.
  #2 (permalink)  
Antiguo 10/01/2014, 13:46
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 15 años, 4 meses
Puntos: 27
Respuesta: Duda con string

con expresiones regulares
algo como ^[A-Z]{2,3}[0-9]{2,3}$
por ahi podes arrancar.
  #3 (permalink)  
Antiguo 10/01/2014, 15:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Duda con string

Separa cada fragmento de la cadena, separándolos a partir de los espacios en blanco que hay entre ellos, convirtiéndose así en un array, estableces un patrón a buscar (expresión regular), recorres el array y evalúas cada fragmento contenido. Si alguno de estos fragmentos, coincide con la expresión regular, quiere decir que ese es el fragmento que estabas buscando, por lo que solamente quedaría asignarlo a una variable y salir del bucle.

Un ejemplo:
Código PHP:
Ver original
  1. $reg = "/^[A-Z]{2,3}[\d]{3}$/";
  2. $string1 = "USA097 WO : SWAP DE GABINETE";
  3. $string2 = "WO : SWAP DE AV222 GABINETE";
  4. $array1 = explode(" ", $string1);
  5. $array2 = explode(" ", $string2);
  6.  
  7. foreach($array1 as $cadena){
  8.     if(preg_match($reg, $cadena)){
  9.         $objetivo = $cadena;
  10.         break;
  11.     }
  12. }
  13. echo strlen($objetivo) ? $objetivo : "No se encontró la cadena";
  14.  
  15. echo "<br />";
  16.  
  17. foreach($array2 as $cadena){
  18.     if(preg_match($reg, $cadena)){
  19.         $objetivo = $cadena;
  20.         break;
  21.     }
  22. }
  23. echo strlen($objetivo) ? $objetivo : "No se encontró la cadena";

El resultado del algoritmo es:

Código HTML:
Ver original
  1. USA097
  2. AV222

La expresión regular ^[A-Z]{2,3}[\d]{3}$, indica que el fragmento a buscar, debe empezar por un grupo de letras mayúsculas, las cuales deben de ser 2 o 3 y deben seguir 3 números hasta el final de la cadena.

Así es como se ve en ejecución: http://ideone.com/87fuIw

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 10/01/2014 a las 20:06
  #4 (permalink)  
Antiguo 13/01/2014, 07:07
 
Fecha de Ingreso: julio-2011
Ubicación: Santiago, Chile.
Mensajes: 95
Antigüedad: 13 años, 4 meses
Puntos: 4
Respuesta: Duda con string

Cita:
Iniciado por Alexis88 Ver Mensaje
Separa cada fragmento de la cadena, separándolos a partir de los espacios en blanco que hay entre ellos, convirtiéndose así en un array, estableces un patrón a buscar (expresión regular), recorres el array y evalúas cada fragmento contenido. Si alguno de estos fragmentos, coincide con la expresión regular, quiere decir que ese es el fragmento que estabas buscando, por lo que solamente quedaría asignarlo a una variable y salir del bucle.

Un ejemplo:
Código PHP:
Ver original
  1. $reg = "/^[A-Z]{2,3}[\d]{3}$/";
  2. $string1 = "USA097 WO : SWAP DE GABINETE";
  3. $string2 = "WO : SWAP DE AV222 GABINETE";
  4. $array1 = explode(" ", $string1);
  5. $array2 = explode(" ", $string2);
  6.  
  7. foreach($array1 as $cadena){
  8.     if(preg_match($reg, $cadena)){
  9.         $objetivo = $cadena;
  10.         break;
  11.     }
  12. }
  13. echo strlen($objetivo) ? $objetivo : "No se encontró la cadena";
  14.  
  15. echo "<br />";
  16.  
  17. foreach($array2 as $cadena){
  18.     if(preg_match($reg, $cadena)){
  19.         $objetivo = $cadena;
  20.         break;
  21.     }
  22. }
  23. echo strlen($objetivo) ? $objetivo : "No se encontró la cadena";

El resultado del algoritmo es:

Código HTML:
Ver original
  1. USA097
  2. AV222

La expresión regular ^[A-Z]{2,3}[\d]{3}$, indica que el fragmento a buscar, debe empezar por un grupo de letras mayúsculas, las cuales deben de ser 2 o 3 y deben seguir 3 números hasta el final de la cadena.

Así es como se ve en ejecución: http://ideone.com/87fuIw

Saludos

Mis disculpas por la demora , ya que el fin de semana me desligo del pc, muchas gracias por la solucion... con tu excelente explicacion ya tengo en mente como hacerlo... les comentare mis avances para que a otra persona le pueda servir.



Saludos :D
  #5 (permalink)  
Antiguo 14/01/2014, 07:58
 
Fecha de Ingreso: julio-2011
Ubicación: Santiago, Chile.
Mensajes: 95
Antigüedad: 13 años, 4 meses
Puntos: 4
Respuesta: Duda con string

La solucion del amigo Alexis88 me funciono perfectamente , ojala que a alguien mas le sirva... Muchas gracias por su ayuda nuevamente.


Saludos :D

Etiquetas: cadena, string
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 22:43.