Pourquoi ne pas simplement faire quelque chose comme:
perl -pi -e 's|echo (\".*?\");|custom_echo($1);|g' file.php
Je ne pense pas \Q
et \E
font ce que vous pensez qu'ils font. Ils ne sont pas le début et la fin des citations. Ils sont dans le cas où vous mettez dans un caractère spécial regex (comme .
) - si vous l'entourez par \Q ... \E
alors le caractère regex spécial n'est pas interprété. En d'autres termes, votre expression régulière essaye de faire correspondre la chaîne littérale (.?*)
, que vous n'avez probablement pas, et ainsi les substitutions ne sont pas faites.
Vous avez également eu votre ?
et *
arrière - Je suppose que vous voulez faire correspondre non avidement, dans ce cas, vous devez mettre le ?
comme modificateur non gourmand aux .*
personnages.
Edit: Je suggère fortement de faire:
perl -pi.bak -e ... file.php
Cela va créer un fichier "de sauvegarde" que le fichier original est copié à. Dans mon exemple ci-dessus, il va créer un fichier nommé file.php.bak
qui contient le contenu d'origine, pré-substitution. Ceci est incroyablement utile pendant les tests jusqu'à ce que vous soyez certain que vous avez construit votre regex correctement. Enfer, le disque est bon marché, je suggère toujours en utilisant l'opérateur de ligne de commande -pi.bak
.
Perl n'est pas un acronyme. – Ether
En fait, c'est un acronyme. Mais il est toujours orthographié 'Perl'. – mob
En fait, ce n'est pas ** un acronyme. Mais il y a plusieurs backronyms. http://en.wikipedia.org/wiki/Perl#Name – Amadan