Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   como buscar (con expresiones regulares) en una cadena, y reemplazarlo? (https://www.clubdelphi.com/foros/showthread.php?t=55340)

gabrielflowers 14-04-2008 17:31:12

como buscar (con expresiones regulares) en una cadena, y reemplazarlo?
 
hola a todos, me encuentro con este problema, pues veran el contexto completo es este: primero estoy leyendo de un archivo txt con file_get_contents();,y guardo el contenido del archivo en una variable $contenido(que seria un string), ahora mi problema es buscar(con expresiones regulares) en la cadena $contenido una frase y reemplazarla por otra, he probado con ereg_replace() y preg_replace pero no me funcionan, algun consejo???

axesys 14-04-2008 17:40:38

Puedes hacerlo con el tp lex yacc

http://www.musikwissenschaft.uni-mainz.de/~ag/tply/

gabrielflowers 14-04-2008 17:42:54

para axesys:bueno tu respuesta me parece poco clara, yo mas bien buscaba alguna funcion de php que me haga esto, o alguna forma hacerlo?, pero siempre bajo el entorno php

axesys 14-04-2008 17:47:11

Perdon no me fije que era para php

gabrielflowers 14-04-2008 18:19:29

alguna otra ayuda?

dec 14-04-2008 18:27:45

Hola,

Puede que la función "str_replace()" te sea suficiente. Por otro lado, comprenderás que decir:

Cita:

Empezado por Gabriel
(...) he probado con ereg_replace() y preg_replace pero no me funcionan, (...)

Es no decir nada. ¿Qué significa que no te funcionan? Si quieres ayuda... ayuda a que te ayuden...

gabrielflowers 14-04-2008 18:30:45

bueno a ver este el codigo con busco con mi expresion regular, en el contenido de un archivo que lo guardo en $lang_content
Código PHP:

$path=$path.'lang/'
$ext='.txt'
$sep='<==>'
$lang_file=$path.$lang.$ext;//es el directorio del archivo 
if(file_exists($lang_file)) 

    
$nl=chr(13).chr(10);//chars delimitadores del texto a buscar
    
$lang_content=file_get_contents($lang_file);//contenido 
    
$lang_content2=ereg_replace($palabra.' +'.$sep.' +(.*)'.$nl,$palabra.' <=> '.$traduccion.$nl,$lang_content); 
         
    
$f=fopen($lang_file,'w');//abre el archivo para escritura 
    
fwrite($f,$lang_content2);//escribir en el archivo 
    
fclose($f);//cerramos el archivo 
    
echo $lang_content2


, pero la funcion ereg_replace no me pilla nada con la expresion regular que le puse(que se que no esta mal), y por tanto no me reemplaza nada, tambien probe con preg_replace y tampoco me funciona, alguien conoce alguna otra funcion (probada) que busque en una cadena con expresiones regulares y lo reemplace, o por ultimo que busque en un array con expresiones regulares? y me devuelva la clave de aquel que coincide con la expresion regular?

dec 14-04-2008 18:41:50

Hola,

Estás dando a entender que lo que fallan son las funciones de PHP, cuando lo más normal es pensar que lo que está equivocado es la expresión regular. O bien que, efectivamente, lo que buscas no está donde lo buscas. No creo que las funciones de PHP que mencionas no estén "probadas". Al contrario, creo que están muy probadas. Me temo que tendrás que afinar la expresión regular en cuestión o buscar el problema en otro sitio, no en las funciones de PHP.

PD. Tal vez me equivoque y hallas descubierto un "bug" en PHP, pero, me permito dudarlo.

Caral 14-04-2008 18:42:12

Hola
De php no se pero me parece que esta funcion reemplaza:
Código PHP:

Some muddling through docs and many obscenties later, I produced the following, which expands escape sequences in an existing string with NO interpolation.

<?php

// where we do all our magic
function expand_escape($string) {
    return 
preg_replace_callback(
        
'/\\\([nrtvf]|[0-7]{1,3}|[0-9A-Fa-f]{1,2})?/',
        
create_function(
            
'$matches',
            
'return ($matches[0] == "\\\\") ? "" : eval( sprintf(\'return "%s";\', $matches[0]) );'
        
),
        
$string
    
);
}

// a string to test, and show the before and after
$before 'Quantity:\t500\nPrice:\t$5.25 each';
$after expand_escape($before);
var_dump($before$after);

/* Outputs:
string(34) "Quantity:\t500\nPrice:\t$5.25 each"
string(31) "Quantity:    500
Price:    $5.25 each"
*/

?>

Saludos

gabrielflowers 14-04-2008 22:20:52

haciendo muchas pruebas la funcion preg_replace() me resulto efectiva para lo que buscaba, evidentemente esta funcion busca(con expresiones regulares) en una cadena y reemplaza, tal como plantee, mas sin embargo la funcion ereg_replace() tiene un comportamiento anormal (quizas por que trabaja con el estandar POSIX Extendido)

y pongo el codigo como referencia para quien lo necesite:
Código PHP:

$path=$path.'lang/';
 
$ext='.txt';
 
$sep='<==>';
 
$lang_file=$path.$lang.$ext;//es el directorio del archivo
if(file_exists($lang_file))//si el archivo existe
{
  
$nl=chr(13).chr(10);//caracteres delimitadores del texto a buscar
  
$lang_content=file_get_contents($lang_file);//contenido del archivo
  
$lang_content=preg_replace('/'.$palabra.' +'.$sep.' +(.*)'.$nl.'/',$palabra.' <==> '.$traduccion.$nl,$lang_content);
  
$f=fopen($lang_file,'w');//abre el archivo para escritura
  
fwrite($f,$lang_content);//escribir en el archivo
  
fclose($f);//cerramos el archivo
  
echo 'modificado!';
 } 

gracias a todos, saludos


La franja horaria es GMT +2. Ahora son las 13:27:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi