Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: AlejandroPrz en 8 Febrero 2014, 10:10 am



Título: ayuda con python
Publicado por: AlejandroPrz en 8 Febrero 2014, 10:10 am
Buenas amigos hacker's. ¿como les va? espero bien.

Tengo una pequeña duda, y es que como puedo hacer para leer todas las coincidencias en una linea con expresiones regulares, ya que estoy haciendo
un software en python para pasar las plantillas de smarty a puro php.
y entonces cuando lee una plantilla y busca una coincidencia, agarra solamente la primera, de la linea, y las otras se quedan sin editarse.

necesito mas o menos hacer esto:


de una linea supongamos esta
Código:
 "<div>Usuario: {$usuario}<span> años: {$user.year}</span></div>"

necesito que las reemplace por estas

Código:
"<div>usuario <?php echo $usuario; ?><span><?php echo $user['year']; ?></span> 

claro todo eso con expresiones regulares ya que pueden cambiar pero no consigo como hacerlo


este es mi codigo:

Código
  1. def parse(self, linea):
  2.        txt = self._var(linea)
  3.        txt = self._arrayVar(linea)
  4.        return txt
  5.  
  6.    def _var(self, linea):
  7.        txt = linea
  8.  
  9.        re1='.*?' # Non-greedy match on filler
  10.        re2='(\\{' # Any Single Character 1
  11.        re3='\\$' # Any Single Character 2
  12.        re4='((?:[a-z][a-z0-9_]*))' # Variable Name 1
  13.        re5='\\})' # Any Single Character 3
  14.  
  15.        rg = re.compile(re1+re2+re3+re4+re5,re.IGNORECASE|re.DOTALL)
  16.        m = rg.search(txt)
  17.        if m:
  18.            print m.group(1) + ' -var simple'          
  19.            var = m.group(2)
  20.            txt = re.sub(r'' + re1+re2+re3+re4+re5, r'\1<?php echo \3;?>', txt)
  21.            return txt
  22.        else:
  23.            return linea
  24.  
  25.    def _arrayVar(self, linea):
  26.        txt = linea
  27.  
  28.        re1='.*?' # Non-greedy match on filler
  29.        re2='(\\{' # Any Single Character 1
  30.        re3='\\$' # Any Single Character 2
  31.        re4='((?:[a-z][a-z0-9_]*))' # Variable Name 1
  32.        re5='\\.' # Any Single Character 3
  33.        re6='((?:[a-z][a-z0-9_]*))' # Variable Name 2
  34.        re7='\\})' # Any Single Character 4
  35.  
  36.        rg = re.compile(re1+re2+re3+re4+re5+re6+re7,re.IGNORECASE|re.DOTALL)
  37.  
  38.        m = rg.search(txt)
  39.        if m:
  40.            print m.group(1) + ' -var double'
  41.            var = m.group(2)
  42.            array = m.group(3)
  43.            txt = re.sub(r'' + re1+re2+re3+re4+re5+re6+re7, r'<?php echo ' + var + '[\'' + array + '\']; ?>' , txt)
  44.            return txt
  45.        else:
  46.            return linea

necesito de sus ayudas. En verdad GRACIAS.


Título: Re: ayuda con python
Publicado por: fary en 8 Febrero 2014, 12:38 pm
No se Python, pero te lo dejo en Perl, que supongo que no cambiará mucho.

Sería con s// y añadiendo al final la letra g para que se repita tantas veces como aparezca la cadena.

en pseudocódigo:

s/CadenaARemplazar/CadenaRemplazada/g;


código real:

Código
  1. use utf8;
  2. use feature 'say';
  3.  
  4. open(my $file,"index.html");
  5. undef $/;
  6. my $datos = <$file>;
  7. close $file;
  8.  
  9. $datos =~ s/<div>Usuario: {\$usuario}<span> años: {\$user.year}<\/span><\/div>/<div>usuario <?php echo \$usuario; ?><span><?php echo \$user['year']; ?><\/span>/g;
  10.  
  11. say $datos;


Título: Re: ayuda con python
Publicado por: AlejandroPrz en 8 Febrero 2014, 20:07 pm
gracias por comentar amigo, intentare a ver.