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
"<div>Usuario: {$usuario}<span> años: {$user.year}</span></div>"
necesito que las reemplace por estas
"<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:
def parse(self, linea):
txt = self._var(linea)
txt = self._arrayVar(linea)
return txt
def _var(self, linea):
txt = linea
re1='.*?' # Non-greedy match on filler
re2='(\\{' # Any Single Character 1
re3='\\$' # Any Single Character 2
re4='((?:[a-z][a-z0-9_]*))' # Variable Name 1
re5='\\})' # Any Single Character 3
rg = re.compile(re1+re2+re3+re4+re5,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
print m.group(1) + ' -var simple'
var = m.group(2)
txt = re.sub(r'' + re1+re2+re3+re4+re5, r'\1<?php echo \3;?>', txt)
return txt
else:
return linea
def _arrayVar(self, linea):
txt = linea
re1='.*?' # Non-greedy match on filler
re2='(\\{' # Any Single Character 1
re3='\\$' # Any Single Character 2
re4='((?:[a-z][a-z0-9_]*))' # Variable Name 1
re5='\\.' # Any Single Character 3
re6='((?:[a-z][a-z0-9_]*))' # Variable Name 2
re7='\\})' # Any Single Character 4
rg = re.compile(re1+re2+re3+re4+re5+re6+re7,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
print m.group(1) + ' -var double'
var = m.group(2)
array = m.group(3)
txt = re.sub(r'' + re1+re2+re3+re4+re5+re6+re7, r'<?php echo ' + var + '[\'' + array + '\']; ?>' , txt)
return txt
else:
return linea
necesito de sus ayudas. En verdad GRACIAS.
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:
use utf8;
use feature 'say';
open(my $file,"index.html");
undef $/;
my $datos = <$file>;
close $file;
$datos =~ s/<div>Usuario: {\$usuario}<span> años: {\$user.year}<\/span><\/div>/<div>usuario <?php echo \$usuario; ?><span><?php echo \$user['year']; ?><\/span>/g;
say $datos;
gracias por comentar amigo, intentare a ver.