Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] expresiones regulares

Estas en el tema de expresiones regulares en el foro de PHP en Foros del Web. Hola a todos, necesito lo siguiente ya que estoy atascado en esto. Tengo una variable del tipo: $var = " campo1:'abc' , campo2:'cde' , campo_n:'nnn' ...
  #1 (permalink)  
Antiguo 05/04/2013, 04:50
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
expresiones regulares

Hola a todos,
necesito lo siguiente ya que estoy atascado en esto. Tengo una variable del tipo:

$var = " campo1:'abc' , campo2:'cde' , campo_n:'nnn' ";

necesito separar con preg_split y una expresión regular los valores entre ,

No me sirve explode ya que a veces los valores incluidos dentro de las ' ' contienen funciones mysql como IF(x,0,1,0) por lo que me sapararia esos valores y a mi lo que me interesa es que quede algo como:

campo1:'abc'
campo2:'cde'
campo3:'lo que sea'

No sé si me he explicado bién pero voy con algo como:

$separa = preg_split("/[*:\'*\']/", $campos);

Pero claro está, no funciona
  #2 (permalink)  
Antiguo 05/04/2013, 09:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresiones regulares

¿Lo que va dentro de comillas podría también contener comillas?

Creo que necesitas mas bien usar preg_match_all() y ajustar mejor tu expresión, cosa que nada tiene que ver con PHP, ya que RegExp es otro lenguaje.

A ver si mueven tu tema al foro correcto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 05/04/2013, 12:25
Avatar de Lautaro_eb  
Fecha de Ingreso: mayo-2010
Ubicación: Bariloche, Argentina
Mensajes: 284
Antigüedad: 13 años, 11 meses
Puntos: 24
Respuesta: expresiones regulares

Y si utilisas json ? Es casi lo mismo y tenes las funciones Json_encode y json_decode
__________________
Mi emprendimiento: Software BRC
Youtube: Tutoriales de programación y electrónica.
  #4 (permalink)  
Antiguo 05/04/2013, 12:55
 
Fecha de Ingreso: septiembre-2012
Mensajes: 75
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: expresiones regulares

Hola marcsirocus disculpa que es lo que quieres hacer?

tienes una variable

$var = " campo1:'abc' , campo2:'cde' , campo_n:'nnn' ";
y quisieras separalos?.

salida:
campo1:'abc'
campo2:'cde'
campo3:'lo que sea'
  #5 (permalink)  
Antiguo 08/04/2013, 01:47
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: expresiones regulares

Hola a todos,
primero gracias a todos por responder.

La questión es que estoy atascado en un script para una función PHP que estoy creando.

por una parte tenemos las variables que són del estilo:

var_1:'valor_1' , var_2:'valor_2' , ... , var_2:'valor_3'

necesito la expresión regular que me separe por , los fragmentos del tipo:

[0] var_1:'valor_1'
[1] var_2:'valor_2'
...
[n] var_n:'valor_n'

La expresión que adjunté está mal y era un simple ejemplo, no me sirve otro lenguaje ya que es para integrarlo a una clase PHP ya creada. No me sirve explode ya que el valor puede contener valores con comas:

var_x:'if(a=0,1,0)'

Espero haberme explicado mejor y que os sirva de ayuda. Yo llevo unos dias intentando construïrla.

Este es el código que tengo por ahora:

$campos = "usuario_activo:'IF(usuario_activo=0,1,0)' , usuario:'a'";
$expresion = "/[.+\:'.+'$]+/";

$separa = preg_split($expresion, $campos);

echo $campos."<br><br>".$expresion."<br><br>";
print_r($separa);


Por otro lado, como puedo recuperar mi usuario antiguo de este foro? ya que creo que està vinculado a una cuenta de correo que ya no utilizo ni existe :_(
A que Deidad superior debo escribir un mail para que asocie mi usuario anterior a mi nuevo mail?

Saludos y gracias

Última edición por marcsirocus; 08/04/2013 a las 02:17
  #6 (permalink)  
Antiguo 08/04/2013, 10:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresiones regulares

¿El formato de dichas cadenas lo diseñaste tu o es algo ya existente?

Pienso que no deberías reinventar la rueda, existiendo lenguajes de marcado que hoy son un estándar no veo mucho sentido en crearte uno nuevo.

Puedes usar JSON o YAML, que son bastante similares a lo que estás buscando.

Sin embargo y si aún deseas inventar tu propio sub-lenguaje deberías estudiar expresiones regulares, ya que son otro sub-lenguaje y tiene su propio sub-foro, en dado caso PHP no tiene mucho que ver hasta que hayas comprendido su funcionamiento y uso.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 09/04/2013, 01:34
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: expresiones regulares

Hola pateketrueke,
gracias por responderme, pero como he especificado antes necesito utilizar expresiones regulares para poderlo integrar a unas funciones ya existentes en php.

Por favor abstenerse a contestar quien sea novato en el asunto, quiera citar que el foro no es el adecuado, etc...

Ni soy nuevo en esto, ni necesito que me digan dónde publicarlo. Sólo necesito alguien que domine expresiones regulares (Sé utilizar lo básico y las más comunes las puedes encontrar en internet.) para poderme hechar una mano.

Por eso abstenerse el resto de los mortales ;)

Paralelamente me gustaría recuperar un usuario antiguo, alguien sabe a quien debo escribir un mail?
  #8 (permalink)  
Antiguo 09/04/2013, 02:08
 
Fecha de Ingreso: marzo-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 9
Respuesta: expresiones regulares

Como odio a la gente que va de lista, ya te han dicho que esto es un foro de PHP y no de regexp... y tu vas de listo y meas en el tiesto... Encime dices que necesitas expresiones regulares... OLE TU!

Cierra la puerta la salir.

A por cierto, pregunta por aquí: http://www.forosdelweb.com/f183/
  #9 (permalink)  
Antiguo 09/04/2013, 02:29
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: expresiones regulares

Cita:
Iniciado por marcsirocus Ver Mensaje
Por favor abstenerse a contestar quien sea novato en el asunto, quiera citar que el foro no es el adecuado, etc...

Ni soy nuevo en esto, ni necesito que me digan dónde publicarlo. Sólo necesito alguien que domine expresiones regulares (Sé utilizar lo básico y las más comunes las puedes encontrar en internet.) para poderme hechar una mano.

Por eso abstenerse el resto de los mortales ;)


Igual es que lo estás enfocando mal y tal vez las respuestas que te hayan dado sean demasiado "avanzadas" para tu nivel y no entiendes que según el formato que das, que es prácticamente igual a JSON y YAML, tienes otras opciones que no conocías y que su uso es bastante habitual. Y da lo mismo que quieras usar esos datos en una clase o donde sea ya que se puede hacer perfectamente.

Ahora, después de tu último mensaje, el problema que tienes ya no es de comprensión, sino de la simpatía que causas en los demás.

Para tu problema con el nombre de usuario tendrías que preguntar en el foro de soporte.
  #10 (permalink)  
Antiguo 09/04/2013, 03:41
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: expresiones regulares

Hola,
gracias a todos por vuestras aportaciones, voy a mover el tema al foro que corresponde y cerrar este post.

Ya que es absurdo ir contestando las mismas cosas a todos.

Pzin gracias por tu respuesta, quizas si que són demasiado "avanzadas" las respuestas y que sea más practico utilizar JSON por la estructura y tal, pero es un proyecto del trabajo y es "cerrado" (debo hacerlo como pido), además después de más de 9 años registrado en el foro y más aún dedicandome al secto sé de lo que me hablo y porqué lo necesito así.

Lo dicho gracias a todos por vuestras aportaciones.

Paz!
  #11 (permalink)  
Antiguo 09/04/2013, 05:12
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: expresiones regulares

Bueno, pero que lleves X años trabajando no quiere decir que tengas el derecho a contestar con cierta soberbia y ninguneando respuestas que intentan simplemente ayudar con buenos consejos —más aún en un foro donde entra mucha gente nueva— porque a priori el usar JSON sería una buena opción como sabrás. Pero si tu primera respuesta a esos consejos es simplemente ponerte en cierta forma por encima de quienes quieren ayudarte pues, ni en un foro ni en la vida te van a tratar muy bien.
Igual lo apropiado hubiese sido comentar eso que dices ahora, que por cuestiones que no vienen a cuento no puedes utilizar otro lenguaje distinto.

De todas formas, si lo pasas por un explode, con algo así podría valerte:
Código regex:
Ver original
  1. (\w*)\:\'(.*)\'

Seguramente haya alguna forma mejor, pero no soy yo muy versado en estas cuestiones.

Última edición por pzin; 09/04/2013 a las 05:21
  #12 (permalink)  
Antiguo 09/04/2013, 05:54
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: expresiones regulares

Insistes en que el tema es de expresiones regulares y después preguntas que dónde puedes publicar un post para recuperar tu cuenta, todo Off topic, pero eso no te priva de añadir:
Cita:
Iniciado por marcsirocus Ver Mensaje
Por favor abstenerse a contestar quien ... quiera citar que el foro no es el adecuado, etc...
Si por lo menos hubieses sido amable, lamentablet.

PD. ¿Estás seguro que no te banearon la otra cuenta?
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #13 (permalink)  
Antiguo 09/04/2013, 06:04
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: expresiones regulares

Hola Pzin,
me parece que te estas confundiendo por completo, tienes total razón en lo que no hay que menospreciar ninguna aportación y más dadas de buena fé.

Si os dió la sensación de sobérvia no era mi intención, lo unico es que no quería que se desviase la conversación hacia un post interminable y que no de oportunidad ninguna a quien pueda realmente ayudar.

No veía operativo tener que explicar todo el caso pero veo que será necesario para no entrar en un bucle interminable de respuestas del tipo (no lo hagas así, es mejor asá, etc...).

El caso que estoy reprogramando una funcion PHP (por eso lo puse en este foro), no la he incluído porqué lo único que necesito es la expresión regular para luego parsearla mediante preg_split. Soy consciente que quizas es mejor pasar las variables de otro modo pero el programa lleva funcionando mucho tiempo, tiene muchas paginas que utilizan esa función y cambiar la forma de funcionar significaria tener que cambiar la forma de pasarle los datos en muchos sitios.

Lo que me enviaste más o menos está bién, ya lo había probado con anterioridad pero es mejor utilizar:

Código PHP:
"/(\w*)\:\'(.*)\'\,/" 
Ya que sinó no toma las , como valor de separado.

Adjunto parte de la función por si alguien quiere probarlo
Código PHP:
$campos "usuario_activo:IF(usuario_activo=0,1,0) , usuario:a , text:'abc'";
$expresion "/(\w*)\:\'(.*)\'\,/";
$separa preg_split($expresion$campos); 
La idea es que pase una variable con los campos separados por comas. Lo unico que los valores dados pueden contener ' o no. Además de poder contener funciones con , dentro de las mismas.

Y por favor dejemos de lado la imagen que os pueda haver causado, es cosa vuestra y de verdad no iba por allí la cosa.

Saluuuuudos
  #14 (permalink)  
Antiguo 09/04/2013, 09:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: expresiones regulares

Cita:
Iniciado por marcsirocus Ver Mensaje
[...] Por favor abstenerse a contestar quien sea novato en el asunto, quiera citar que el foro no es el adecuado, etc...

Ni soy nuevo en esto, ni necesito que me digan dónde publicarlo. Sólo necesito alguien que domine expresiones regulares (Sé utilizar lo básico y las más comunes las puedes encontrar en internet.) para poderme hechar una mano. [...]
No soy ningún novato en el tema, de hecho, soy moderador del foro de RegExp así que deberías observar con mas atención las sugerencias que se te hacen.

Si necesitas aprender a publicar los temas donde corresponde, no necesitas que nadie te lo diga eso es cierto pero tampoco es excusa que digas que sepas lo que haces cuando al final no estás respetando las normas del foro.

Así que si de verdad requieres ayuda con las expresiones regulares, deberías ir normando tu conducta, gracias.

PDTA: como te dije en un principio, no necesitas usar preg_split(), lo que debes usar es preg_match_all() para extraer todas las coincidencias del patrón incluyendo claves y valores, después debes iterar dicha estructura para construir una más adecuada de acuerdo a tus necesidades.

Consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 09/04/2013, 09:37
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: expresiones regulares

Gracias pateketrueke,
tienes razón con lo de preg_split, empezé a hacer pruebas con preg_match_all() pero sigo sín dar con el la regexp correcta.

Perdón si se tomaron las cosas como no pretendía que se tomaran ;)


Etiquetas: expresiones, mysql, regulares
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 18:28.