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
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.