Foros del Web » Programación para mayores de 30 ;) » RegExp »

[SOLUCIONADO] Expresión regular según patrón

Estas en el tema de Expresión regular según patrón en el foro de RegExp en Foros del Web. Hola a todos, tengo problemas con una expresión regular, os comento el caso y luego os digo dónde me encuentro: por un lado a mi ...
  #1 (permalink)  
Antiguo 09/04/2013, 04:16
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Expresión regular según patrón

Hola a todos,
tengo problemas con una expresión regular, os comento el caso y luego os digo dónde me encuentro:

por un lado a mi me pasan una variable que conteniene valores del siguiente modo:

$var = "campo_1:'valor_1' , campo_2:valor_2 , campo_3:si(valor,0,1), campo_n:'valor_n'";

Necesito que mediante la expresión regular mi salida sea:

[0] campo_1:'valor_1'
[1] campo_2:valor_2
[2] campo_3:si(valor,0,1)
...
[n] campo_n:'valor_n'


A tener en cuenta: el patron debe separar los datos separados por la coma, pero teniendo en cuenta que el valor puede contener , dentro de su valor y hay veces que los valores van cerrados con ' o no indiferentemente.

Lo ultimo que he coseguido es "([:_.0-9a-z-]+)"

que me separa los valores pero sin tener en cuenta los ' ni las ,

No sé si me he explicado del todo bién pero si necesitais más info solicitadla.

Saludos y gracias por anticipado
  #2 (permalink)  
Antiguo 09/04/2013, 10:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Expresión regular según patrón

Una de las cualidades de las expresiones regulares es que mantienen también normas lógicas, en algunos casos es conveniente especificar que secuencia de caracteres es permitida pero en otros escenarios conviene más permitir todo excepto ciertas secuencias, lo cual sería una negación.

Tu problema es mas sencillo de atacar si la expresión que pretende capturar el valor se entendiera como "cualquier cosa excepto comillas", ¿tiene más sentido o no?

Cita:
[^']+
Ahora, como lo planteas algunos valores no requieren comillas, si las comillas son opcionales, entonces debes hacerlas también opcionales en la expresión que captura los valores.

Cita:
('?)[^']+?\1
Para poder delimitar con mayor precisión necesitarías especificar que al final del patrón va seguido por el fin de la cadena o también el mismo patrón repitiéndose (el caso mas sencillo de obtener esto sería especificando mínimo la clave).

Cita:
(?=\s*,\s*[\w-]+:|$)
Y claro, especificar espacios de manera opcional y flexible donde se pueda dar la posibilidad.

Cita:
\s*
Finalmente el patrón de la clave debe ser bastante sencillo, imagino que únicamente buscas capturar claves normalizadas, es decir secuencias alfanuméricas con guiones y nada más.

Cita:
[\w-]+
En suma el patrón debería quedar así:

Cita:
/\b([\w-]+)\s*:\s*('?)([^']+?)\\2(?=\s*,\s*[\w-]+:|$)/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/04/2013, 10:18
marcsirocus
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Expresión regular según patrón

pateketrueke acabas de entrar en mi lista de idolos

He estado probando y si que me funciona bién. Gracias por tu tiempo y disculpa por haber empezado con mal pié :_(

Voy a desmenuzar la expreg y hacer pruebas y cambios para poder reutilizar o empezar a crear mis expreg complejas ;)

Mil gracias.

Etiquetas: regular, según
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 10:16.