Foros del Web » Programando para Internet » PHP »

Ayuda con una Expresión Regular

Estas en el tema de Ayuda con una Expresión Regular en el foro de PHP en Foros del Web. Hola que tal amigos tengo un problema necesito sacar de un string unos patrones que tengo, ejemplo: Código PHP: $String  =  "[bold]hola esto es texto en bold[\bold] exto no es tento en bold,[bold]de nuevo texto en bold[/bold]" ;  De hecho ...
  #1 (permalink)  
Antiguo 24/11/2004, 02:42
 
Fecha de Ingreso: agosto-2004
Mensajes: 5
Antigüedad: 19 años, 8 meses
Puntos: 0
Pregunta Ayuda con una Expresión Regular

Hola que tal amigos tengo un problema necesito sacar de un string unos patrones que tengo, ejemplo:

Código PHP:
$String "[bold]hola esto es texto en bold[\bold] exto no es tento en bold,[bold]de nuevo texto en bold[/bold]"
De hecho esto es sencillo usando una Expresión Regular, misma que sería algo como:

Código PHP:
$RegExp "\[bold\][a-z\s]*\[\/bold\]"
Pero digamos que ahora el String es este:

Código PHP:
$String "[bold]hola esto es texto en bold[\bold] exto no es tento en bold,[bold]Mi fecha de nacimiento en bold 27081983[/bold]"
Esto tambien es muy sencillo:

Código PHP:
$RegExp "\[bold\][a-z\s\d]*\[\/bold\]"
Pero se complica cuando hay caracteres extraños, ejemplo:

Código PHP:
$String "[bold]hola esto es texto en negritas OK?[/bold] esto se ve que no es texto en bold, unos cuantos caracteres en bold [bold]ñññññ[\bold]"
Si uso algo como:

Código PHP:
$RegExpr "\[bold\][a-z\s\d\W]*\[\/bold\]"
Me regresa toda la cadena, es decir deberia regresar algo como
Código PHP:
echo $MyArray[0][0]; #Esto debería imprimir -> [bold]hola esto es texto en negritas OK?[/bold]
echo $MyArray[0][1]; #Esto debería imprimir -> [bold]ñññññ[/bold] 
pero por el contrario imprime:
Código:
[bold]hola esto es texto en negritas OK?[/bold] esto se ve que no es texto en bold, unos cuantos caracteres en bold [bold]ñññññ[\bold]
aqui les pongo una liga pára que prueben sus expresiones regulares:
http://www.cuneytyilmaz.com/prog/jrx/

Por cierto uso la funcion:
Código PHP:
preg_match_all("/" $RegExp "/"$String$MyArray); 
De antemano muchas gracias amig@s
  #2 (permalink)  
Antiguo 24/11/2004, 05:14
Avatar de ProgramacionWeb  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 176
Antigüedad: 20 años, 10 meses
Puntos: 2
Yo uso lo siguiente:
\[bold\](.*?)\[\/bold\]

Quesustituye cualquier ocurrencia empezada por [bold] y finalizada por [/bold] sea lo que sea lo que tenga dentro, ademas si añadea /i al final servirá tambien con [BOLD]
__________________
Foros en los que participo:

Última edición por ProgramacionWeb; 24/11/2004 a las 05:19
  #3 (permalink)  
Antiguo 24/11/2004, 14:53
 
Fecha de Ingreso: agosto-2004
Mensajes: 5
Antigüedad: 19 años, 8 meses
Puntos: 0
Pregunta Gracias, me sirivio mucho, una ultima duda...

Hola, muchas gracias Eloi de San Martín, una ultima duda:

He visto a lo largo del tiempo que llevo usando expresiones regulares está expresion:
(.*) ó en este caso (.*?)

Podrías decirme que hace cada caracter?

Porque de hecho creo que el "*" signifca 0 (cero) ó más veces algo como {0,}
el "?" significa 0 (cero) ó una vez algo como {0,1}
siempre y cuando vayan despues "[]" ejemplo "[a-z]?"

Muchas Gracias de antemano
  #4 (permalink)  
Antiguo 28/11/2004, 16:17
Avatar de ProgramacionWeb  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 176
Antigüedad: 20 años, 10 meses
Puntos: 2
El . significa cualquier carácter, el * 'Cero o mas repeticiones del caracter que la precede' y el ? 'Cero o una repeticiones del caracter que la precede', por lo que (.*?) significa:

cero o una repetición de cero o mas repeticiones de cualquier caracter.

Es decir 'cualquier cosa que le exes e incluso nada'
__________________
Foros en los que participo:
  #5 (permalink)  
Antiguo 28/11/2004, 16:27
 
Fecha de Ingreso: agosto-2004
Mensajes: 5
Antigüedad: 19 años, 8 meses
Puntos: 0
hola que crees? jeje que no me funciona muy bien la expresión regular

ejemplo:

Código:
ExpReg = \[b\](.*?)\[\/b\]

Str = "hola que tal niño";
hasta aqui funciona bien pero cuando hay un salto de linea ya no funciona.

Ejemplo:

Código:
ExReg = \[b\](.?*)\[\/b\]
Str = " hola a todos
un gusto en saludarles";
lo intente con \[b\](.*?)\[\/b\] OR \[b\](.*?\n*)\[\/b\]
pero solo recupera el primer salto de linea despues del string

Ejemplo:
Código:
ExpReg = \[b\](\n*.*?\n*)\[\/b\]
Str = "hola a todos esto es una prueba
espero esten de acuerdo ;)
";
y no funciona

De antemano gracias.
  #6 (permalink)  
Antiguo 28/11/2004, 16:30
Avatar de ProgramacionWeb  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona
Mensajes: 176
Antigüedad: 20 años, 10 meses
Puntos: 2
Me extraña, pues yo uso:

$strTexto=preg_replace("/\[b\](.*?)\[\/b\]/i", "<b>$1</b>", $strTexto);

Y me funciona perfectamente con saltos de línea y todo.
__________________
Foros en los que participo:
  #7 (permalink)  
Antiguo 28/11/2004, 16:32
 
Fecha de Ingreso: agosto-2004
Mensajes: 5
Antigüedad: 19 años, 8 meses
Puntos: 0
jejeje bueno seguire intentado, muchas pero muchas gracias!
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 05:29.