Foros del Web » Programando para Internet » PHP »

Duda con expresiones regulares

Estas en el tema de Duda con expresiones regulares en el foro de PHP en Foros del Web. Hola, aun no estoy muy familirizado con utilizarlas y he hecho esta para ver si funciona y no lo consigo: Código PHP: if( preg_match ( ...
  #1 (permalink)  
Antiguo 24/08/2007, 19:13
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 14 años, 4 meses
Puntos: 7
Duda con expresiones regulares

Hola, aun no estoy muy familirizado con utilizarlas y he hecho esta para ver si funciona y no lo consigo:

Código PHP:
if(preg_match("/^(|^http:\/\/(www)?\.?apogeusone.(com|es)()*|i)/","http://www.google.es/web/apoweb_profile.php",$coincidencias))
{
    
#Tambien he probado con |^http:\/\/(www)?\.?apogeusone.(com|es)|i
    
echo "COINCIDE";
    
print_r($coincidencias);
}
else
{
    echo 
"NO COINCIDE";

Lo que pretendo es que al pasarle una url, el contenido que pongo debe:
1-Empezar por el principio de la cadena(y no estar en medio o al final)
2-Puede llevar o no http://
3-Puede llevar o no www
4-Puede ir seguido de .
5-Contiene la palabra apogeusone
6-Seguido de .es o .com
5-Seguido de cualquier otro caracter

No se hago mal pero no me llega a funcionar bien. Aparte como ya digo en el punto 1, no debe estar la cadena apogeusone.com o .es en medio de la palabra por urls como estas 3 que siguen funcionarian y no quiero eso.

http://www.google.es/search?hl=es&q=...G=Buscar&meta=
http://www.google.es/search?hl=es&q=...G=Buscar&meta=
http://www.google.es/search?hl=es&q=...G=Buscar&meta=

Un ejemplo valido seria:
http://www.apogeusone.es/web/apoweb_profile.php

Que hago mal y porque? alguna solución? Gracias
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #2 (permalink)  
Antiguo 24/08/2007, 21:22
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Duda con expresiones regulares

A ver qué sale...

Cita:
1-Empezar por el principio de la cadena(y no estar en medio o al final)
^

Cita:
2-Puede llevar o no http://
^(http://)?

Cita:
3-Puede llevar o no www
^(http://)?(www\.)?

Cita:
4-Puede ir seguido de .
^(http://)?(www\.)?\.?

Cita:
5-Contiene la palabra apogeusone
^(http://)?(www\.)?\.?apogeusone

Cita:
6-Seguido de .es o .com
^(http://)?(www\.)?\.?apogeusone\.(com|es)

Cita:
5-Seguido de cualquier otro caracter
^(http://)?(www\.)?\.?apogeusone\.(com|es).


Así queda el patrón que cumple con todos tus requisitos.

Espero que te funcione.


Saludos.
  #3 (permalink)  
Antiguo 24/08/2007, 21:31
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 14 años, 4 meses
Puntos: 7
Re: Duda con expresiones regulares

Me dice que NO coincide

Código PHP:
if(preg_match("^(http://)?(www)?\.?apogeusone\.(com|es).","http://www.apogeusone.es/web/apoweb_profile.php",$coincidencias))
{
    echo 
"COINCIDE";
    
print_r($coincidencias);
}
else
{
    echo 
"NO COINCIDE";

Cosas que me has hecho ver:

1- "." Es cualquier caracter (yo utilizaba "*")
2- Me deje en apogeusone"."com ese punto sin escapar
3- No hace falta englobar en un parentesis todo para aplicar "^"

Pero por lo que sea aun sigue sin funcionar...

EDITO: He probado con ^(http:\/\/)?(www)?\.?apogeusone\.(com|es).

(escapando el http://) y tampoco funciona.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #4 (permalink)  
Antiguo 25/08/2007, 14:37
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Duda con expresiones regulares

Pero no funciona porque estás usando preg_match con un patrón sin delimitadores.
Usá ereg o dejá el patrón como

"#^(http://)?(www)?\.?apogeusone\.(com|es).#"

(los patrones de Perl necesitan un separador, que normalmente es / pero puede usarse cualquier caracter, como en este caso usé #)


Saludos.
  #5 (permalink)  
Antiguo 25/08/2007, 22:01
 
Fecha de Ingreso: diciembre-2005
Mensajes: 122
Antigüedad: 14 años
Puntos: 0
Re: Duda con expresiones regulares

Código PHP:
preg_match('/^(http:\/\/)?(www)?(\.)?(apogeusone)?\.(com|es)\/(.+)/',"http://www.apogeusone.es/web/apoweb_profile.php",$coincidencias
  #6 (permalink)  
Antiguo 26/08/2007, 09:19
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 14 años, 4 meses
Puntos: 7
Re: Duda con expresiones regulares

Gracias alvlin ahora si funciona perfecto ;)

La solución de plus_ultra no me vale porque ha cambiado demasiadas cosas y ya no se asemeja a la expresion que decia por ejemplo con el (apogeusone)? ya que esa palabra es necesaria y puesto que no hace falta escapar los caracteres, pues no es necesaria.

Una ultima cosa, para que admita mayusculas y minusculas(otro requisito que se me ha ocurrido) le añadido al final del delimitador la "i" quedando como:

"#^(http://)?(www)?\.?apogeusone\.(com|es).#i"

Muchas gracias a todos.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
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 09:17.