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

Alguien que sepa bastante sobre RegExp, que me eche un cable

Estas en el tema de Alguien que sepa bastante sobre RegExp, que me eche un cable en el foro de RegExp en Foros del Web. Tengo un problema con este patrón: Código PHP: $pattern  =  "/^([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]+)" .              "\s*=\s*" .              "(?:\"([^\"]*)\"|(\\d*(?:[\\.\\,]\\d*)?))/" ;  La cosa es que se supone que ...
  #1 (permalink)  
Antiguo 14/11/2010, 16:39
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años, 6 meses
Puntos: 6
Alguien que sepa bastante sobre RegExp, que me eche un cable

Tengo un problema con este patrón:

Código PHP:
$pattern "/^([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]+)".
            
"\s*=\s*".
            
"(?:\"([^\"]*)\"|(\\d*(?:[\\.\\,]\\d*)?))/"
La cosa es que se supone que este patrón coincide con una linea de un archivo de configuración (aún le falta soporte para hexadecimales y octales) por ahora solo soporta decimales, decimales con coma/punto flotante (es redundante, sí, pero \d no reconoce números como 10.5), y cadenas de texto encerradas en comillas dobles, más adelante añadiré simples, pero eso no importa.

lo que me viene sacando de quicio es que este patrón captura 3 sub-cadenas en cuanto a decimales o decimales con coma flotante se refiere (las cadenas por ahora veo que funcionan), la primera, como es de esperar, captura el nombre de la variable de configuración, la segunda, y mi archienemigo, es una cadena vacía que no sé de donde sale, y la tercer es el valor de la variable.

Alguien sabría ayudarme a corregir este comportamiento?, de donde sale la 2ª cadena?.

Gracias al que colabore.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #2 (permalink)  
Antiguo 15/11/2010, 03:45
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Alguien que sepa bastante sobre RegExp, que me eche un cable

puede ser algún tipo de captura recursiva? lo raro es que no hay ninguna expresión que coincida con una cadena vacía, al menos a mi parecer.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #3 (permalink)  
Antiguo 15/11/2010, 04:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Alguien que sepa bastante sobre RegExp, que me eche un cable

Busca todo aquellos parentesis que no hayas declarado como (?: y verás tu archienemigo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 15/11/2010, 10:15
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Alguien que sepa bastante sobre RegExp, que me eche un cable

Cita:
Iniciado por abimaelrc Ver Mensaje
Busca todo aquellos parentesis que no hayas declarado como (?: y verás tu archienemigo.
esto.... mmm... no caigo....

está claro que la porción del patrón que falla es esta: (al menos eso creo)

Código PHP:
"(?:\"([^\"]*)\"|(\\d*(?:[\\.\\,]\\d*)?))/" 
El primer sub-patrón es para una selección disyuntiva (o rama alternativa según la documentación). Esta no se captura.

El siguiente sub-patrón pertenece a una de las opciones, solo se captura lo que está entre paréntesis. Esta se captura.

El siguiente sub-patrón (que recursivo, jeje) es el de los números, que además incluye otro para el soporte de decimales, el incluido no se captura, pero el exterior sí.

Ahora bien, si repasamos el contador nos damos cuenta de que hay:
  • 4 sub-patrones
  • 2 sub-patrones capturados, pero disyuntivamente (si se captura uno no se captura el otro)

y entonces, donde está mi archienemigo?
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter

Etiquetas: php, cables
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:27.