2011-07-30 3 views
1

Je souhaite remplacer toutes les balises courtes php par des balises complètes.recherche/remplacement d'expressions régulières dans Notepad ++

Exemple texte source:

<a href="<?=$baseurl?>random/<?php echo $offset+$per_page; ?>" class="arrows right" <?php echo $displayright; ?>></a> 

résultat final attendu:

<a href="<?php echo $baseurl; ?>random/<?php echo $offset+$per_page; ?>" class="arrows right" <?php echo $displayright; ?>></a> 

Je suis aussi loin que cela:

Trouvez ce que: <?=(.*)?>

Remplacer par: <?php echo \1; ?>

Mais le résultat est:

<a href="<?php echo $baseurl?>random/<?php echo $offset+$per_page; ?>" class="arrows right" <?php echo $displayright; ; ?>></a> 

Il ne fonctionne pas vraiment quand il y a plusieurs balises d'ouverture et de fermeture php sur une ligne.

Comment résoudre ce problème? Merci!

+1

Notepad ++ les expressions régulières sont plutôt brisées de toute façon ...: / – Nightfirecat

Répondre

1

Oui, parce que l'opérateur * est avide et va essayer de tout correspondre à la ? finale. Vous pouvez résoudre ce problème en faisant correspondre tout sauf la ? dans la balise de fermeture:

Trouvez ce que: <?=([^?]*)?>

Remplacer par: <?php echo \1; ?>

0

Lorsque vous utilisez *, correspond Notepad ++ autant que possible, de sorte que vous besoin de lui dire ce que vous ne voulez pas correspondre il arrête sans trouver la ligne entière:

Recherche: <?=([^?]*)?>

Remplacer: <?php echo \1; ?>

1

Mettre ceci dans le champ Rechercher:

<\?=([^?]+)\?> 

Et ce dans le domaine de remplacement:

<?php echo \1; ?> 
0

Utiliser * dans votre regex rend « gourmand » et vous ne voulez pas cette. Vous voulez que la première occurrence de?> Soit appariée et non la dernière. Également ? caractère est spécial dans les expressions rationnelles de sorte que vous avez besoin de l'échapper aussi:

<\?=([^?]+)\?> 
Questions connexes