Foros del Web » Programando para Internet » PHP »

regex en php

Estas en el tema de regex en php en el foro de PHP en Foros del Web. Una consulta necesito armar un patron para usar con preg_match_all y la verdad no me esta saliendo. el tema es asi: tengo una funcion que ...
  #1 (permalink)  
Antiguo 28/07/2008, 07:27
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
regex en php

Una consulta necesito armar un patron para usar con preg_match_all y la verdad no me esta saliendo.

el tema es asi:

tengo una funcion que toma de parametro un cadena que viene siempre con 2 caracteres cualquiera adelante y luego puede traer 0,1o2 numeros atras y luego un guion medio (-)

osea por ejemplo esta cadena: ab2-aj34-ck4-bs-az45

y necesitaria sacarla en un array asi

array(
[0] => ab2
[1] => aj34
.....//etc
)

que esto ya lo hace preg_match.

el tema es que no se como armar la cadena patron...

alguien tiene alguna idea?? muchas gracias desde ya.
  #2 (permalink)  
Antiguo 28/07/2008, 08:59
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: regex en php

esto es todo lo que hay que hacer

Código PHP:
//tomas la cadena
$cadena'ab2-aj34-ck4-bs-az45';
//agregas mas guiones
$cadenastr_replace("-","--",$cadena);
//pones guines al final i al principio
$cadena'-'.$cadena.'-';
//buscas lo que esta entre guiones
$buscar'-(.*?)-';
//conbiertes lo que esta entre guiones en un array
preg_match_all("/$buscar/",$cadena,$lista);
//imprimes el array (si quieres imprimir todo solo para verlo pon esto "print_r (lista);" )
print $lista[1][0];
print 
$lista[1][0];
print 
$lista[1][1];
print 
$lista[1][2];
print 
$lista[1][3];
print 
$lista[1][4]; 
espero te sirva.
responde para saber si funciono.
  #3 (permalink)  
Antiguo 28/07/2008, 09:04
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: regex en php

miren hize esta funcion

function separarString($str,& $array = null){
preg_match_all("/([a-z,A-Z]{2}[0-9]{0,2})\-*/",$str,$array);
}
$date="be45-ba2-ba34-ba55-pedrito-gh45";
separarString($date,$array);

echo "<xmp>";
print_r($array);
echo "</xmp>";

pero lo que me esta devolviendo es esto

Array (
[0] => Array (
[0] => be45-
[1] => ba2-
[2] => ba34-
[3] => ba55-
[4] => pe
[5] => dr
[6] => it
[7] => gh45 )
[1] => Array (
[0] => be45
[1] => ba2
[2] => ba34
[3] => ba55
[4] => pe
[5] => dr
[6] => it
[7] => gh45 )
)

por lo que lei

$array[0]es una matriz con las coincidencias completas del patrón, $array[1] es una matriz con las cadenas que coinciden con el primer sub-patrón entre paréntesis. lo cual estabien. ahora el tema es que no se como hacer para que el pedrito no me lo traiga. se entiende?
  #4 (permalink)  
Antiguo 28/07/2008, 09:06
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: regex en php

olle leiste esto ¿?

Cita:
Iniciado por enlinea777 Ver Mensaje
esto es todo lo que hay que hacer

Código PHP:
//tomas la cadena
$cadena'ab2-aj34-ck4-bs-az45';
//agregas mas guiones
$cadenastr_replace("-","--",$cadena);
//pones guines al final i al principio
$cadena'-'.$cadena.'-';
//buscas lo que esta entre guiones
$buscar'-(.*?)-';
//conbiertes lo que esta entre guiones en un array
preg_match_all("/$buscar/",$cadena,$lista);
//imprimes el array (si quieres imprimir todo solo para verlo pon esto "print_r (lista);" )
print $lista[1][0];
print 
$lista[1][0];
print 
$lista[1][1];
print 
$lista[1][2];
print 
$lista[1][3];
print 
$lista[1][4]; 
espero te sirva.
responde para saber si funciono.
este es el resultado
(
[0] => Array
(
[0] => -ab2-
[1] => -aj34-
[2] => -ck4-
[3] => -bs-
[4] => -az45-
)

[1] => Array
(
[0] => ab2
[1] => aj34
[2] => ck4
[3] => bs
[4] => az45
)

)
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:40.