Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Concidencias En Cadena (PREG_MATCH)

Estas en el tema de Concidencias En Cadena (PREG_MATCH) en el foro de PHP en Foros del Web. Buen dia colegas. Como dice el tema estoy buscando coincidencias en direcciones con preg_match para estandarizar datos. He buscado en el foro y el san ...
  #1 (permalink)  
Antiguo 15/07/2014, 15:31
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta Concidencias En Cadena (PREG_MATCH)

Buen dia colegas.

Como dice el tema estoy buscando coincidencias en direcciones con preg_match para estandarizar datos.

He buscado en el foro y el san google y he creado una regla que es la siguiente:

Código PHP:
$patron="[COL*?]is"
Busco las coincidencias posibles con "Colonia" para estandarizar este valor.

EL invonveniente radica a la hora de que encuentra otro caracter despues de la regla

Adjunto mi programa
Código PHP:
$cadena1="COL LOS NARANJITOS FRTE A COL. LOS FULECOS ESQUINA OPUESTA A LA COLONIA ZAKUMI CALLE MUNDIAL CASA 2018";

echo 
$cadena1."</br></br>";

$patron="[COL*?]is";


$var=preg_match($patron,$cadena1);


echo 
"<b>Output</b><br>";
echo 
$var."</br>";

$regex=preg_replace($patron,'COLONIA',$cadena1);
echo 
$regex."</br>"
Como se observa si encuentra un . o la misma palabra bien escrita " Colonia" me la sustituye, nose si mi regla esta bien declarada o que le falta.

Agradecere algun aporte.

Saludos.
  #2 (permalink)  
Antiguo 15/07/2014, 15:35
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: Concidencias En Cadena (PREG_MATCH)

Lo que sucede es que L*? significa "ninguna L o de una a más" y claro que va a capturar palabras que contenga "CO" aunque no necesariamente "COL", así que tu expresión está errada.

Debes colocar .*? que significa "cualquier cosa", debes notar que los modificadores *+{} se aplican sobre el último elemento de la expresión a la izquierda.

PDTA: hay un sub-foro de RegExp, por favor procurar abrir temas donde corresponde.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 15/07/2014, 15:49
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta Respuesta: Concidencias En Cadena (PREG_MATCH)

Cita:
Iniciado por pateketrueke Ver Mensaje
Lo que sucede es que L*? significa "ninguna L o de una a más" y claro que va a capturar palabras que contenga "CO" aunque no necesariamente "COL", así que tu expresión está errada.

Debes colocar .*? que significa "cualquier cosa", debes notar que los modificadores *+{} se aplican sobre el último elemento de la expresión a la izquierda.

PDTA: hay un sub-foro de RegExp, por favor procurar abrir temas donde corresponde.
Muchas gracias por la info y me disculpo por no colocar el post donde corresponde.

Volviendo al tema he cambiado el valore de la regla como dijiste quedandome asi:

Código PHP:
$cadena1="COL LOS NARANJITOS FRTE A COL. LOS FULECOS ESQUINA OPUESTA A LA COLONIA ZAKUMI CALLE MUNDIAL CASA 2018";

echo 
$cadena1."</br></br>";

$patron="[COL.*?]is";


$var=preg_match($patron,$cadena1);


echo 
"<b>Output</b><br>";
echo 
$var."</br>";

$regex=preg_replace($patron,'COLONIA',$cadena1);
echo 
$regex."</br>"
Indicando el punto para que tome cualquier valor despues de la L.

Ahora viendo viendo el output me devuelve esto:

Input
COL LOS NARANJITOS FRTE A COL. LOS FULECOS ESQUINA OPUESTA A LA COLONIA ZAKUMI CALLE MUNDIAL CASA 2018


Y el output esto:
Output
1
COLONIA LOS NARANJITOS FRTE A COLONIA. LOS FULECOS ESQUINA OPUESTA A LA COLONIAONIA ZAKUMI CALLE MUNDIAL CASA 2018


Me sustituye la palabra correcta de Colonia Zakumi y no quita el punto de la Colonia Fuleco.

Esta parte nose donde debo corregir la regla.
  #4 (permalink)  
Antiguo 15/07/2014, 17:30
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: Concidencias En Cadena (PREG_MATCH)

Para ese caso debes "mirar hacia adelante" para verificar que no exista el resto de la palabra (a), o bien, cambiar la expresión para que sólo busque por cualquier otro fragmento excepto letras (b).

Cita:
a) /COL(?!ONIA)/
b) /COL\W+/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 17/07/2014, 11:59
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Exclamación Respuesta: Concidencias En Cadena (PREG_MATCH)

Cita:
Iniciado por pateketrueke Ver Mensaje
Para ese caso debes "mirar hacia adelante" para verificar que no exista el resto de la palabra (a), o bien, cambiar la expresión para que sólo busque por cualquier otro fragmento excepto letras (b).
Dejame comentarte que me funciono este tip que me proporcionas.

Antes de marcar como solucionado entre en otra disyuntiva, siempre con el tema de direccion como debo terminar esta regla:

Código PHP:
//Calle
$patron_cll="/(?!^)C(?!$)L(?!$)L(?!$)/i"
Esta sirve para la calles estas pueden venir en varias abreviaturas ('CLL','CLLE', etc) pero a la hora de que utilizo el preg_replace cuando encuntra los texto y sustituye por 'CALLE' sucede lo siguiente:

Si es :
CLL =CALLE (Este se efectua sin problema)
CLLE =CALLEE (Problema no efectua la sustitucion completa)

Imagino que es por que no he cerrado o algo asi mi regla.

Me comentas como debo terminar mi sintaxis.

Gracias nuevamente.
  #6 (permalink)  
Antiguo 17/07/2014, 12:46
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: Concidencias En Cadena (PREG_MATCH)

La segunda expresión (b) efectivamente está errada, sin embargo la primera funciona mejor.

Código PHP:
Ver original
  1. $cadena1="COL LOS NARANJITOS FRTE A COL. LOS FULECOS ESQUINA OPUESTA A LA COLONIA ZAKUMI CALLE MUNDIAL CASA 2018";
  2. $patron = '/COL(?!ONIA)/i';
  3.  
  4. echo preg_replace($patron,'COLONIA',$cadena1);

Sin embargo se conserva el punto de COL., con lo cual habría que modificar un poco la expresión:
Código PHP:
Ver original
  1. $cadena1="COL LOS NARANJITOS FRTE A COL. LOS FULECOS ESQUINA OPUESTA A LA COLONIA ZAKUMI CALLE MUNDIAL CASA 2018";
  2. $patron = '/COL\.?(?!ONIA)/i';
  3.  
  4. echo preg_replace($patron,'COLONIA',$cadena1);
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 17/07/2014, 12:56
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta Respuesta: Concidencias En Cadena (PREG_MATCH)

Cita:
Iniciado por pateketrueke Ver Mensaje
La segunda expresión (b) efectivamente está errada, sin embargo la primera funciona mejor.

Código PHP:
Ver original
  1. $cadena1="COL LOS NARANJITOS FRTE A COL. LOS FULECOS ESQUINA OPUESTA A LA COLONIA ZAKUMI CALLE MUNDIAL CASA 2018";
  2. $patron = '/COL(?!ONIA)/i';
  3.  
  4. echo preg_replace($patron,'COLONIA',$cadena1);

Sin embargo se conserva el punto de COL., con lo cual habría que modificar un poco la expresión:
Código PHP:
Ver original
  1. $cadena1="COL LOS NARANJITOS FRTE A COL. LOS FULECOS ESQUINA OPUESTA A LA COLONIA ZAKUMI CALLE MUNDIAL CASA 2018";
  2. $patron = '/COL\.?(?!ONIA)/i';
  3.  
  4. echo preg_replace($patron,'COLONIA',$cadena1);
Excelente amigo muy funcional tu ejemplo ya puesto en practica.

Pero mi duda era con respecto a la cadena que te coloque para detectar las diferentes abreviaturas de CALLE que detalle.

Disculpa las molestias.
  #8 (permalink)  
Antiguo 17/07/2014, 13:11
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: Concidencias En Cadena (PREG_MATCH)

Esa expresión debería ser más simple:
Cita:
/CA?LLE?/i
No hace falta usar combinaciones bizarras si no comprendes lo que realizan, te sugiero consultar una referencia de expresiones regulares.

Mientras tanto, te sugiero abrir temas relacionados con RegExp en el sub-foro correcto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 17/07/2014, 13:46
 
Fecha de Ingreso: marzo-2011
Ubicación: San Salvador
Mensajes: 49
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Concidencias En Cadena (PREG_MATCH)

Cita:
Iniciado por pateketrueke Ver Mensaje
Esa expresión debería ser más simple:


No hace falta usar combinaciones bizarras si no comprendes lo que realizan, te sugiero consultar una referencia de expresiones regulares.

Mientras tanto, te sugiero abrir temas relacionados con RegExp en el sub-foro correcto.
Las disculpas nuevamente por el lugar equivocado.

Con esto se solventa mi duda.

Gracias nuevamente :)

Etiquetas: expresiones, preg_match, 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 13:46.