J'ai un projet sur lequel je travaille à la conversion de certaines anciennes formes perl cgi en PHP. Beaucoup de ceci exige de trouver/remplacer l'information. Dans un tel cas, j'ai des lignes comme dans le script perl:Textmate Regex Rechercher Remplacer Aide
<INPUT type="radio" name="trade" value="1" $checked{trade}->{1}>
qui doit lire:
<INPUT type="radio" name="trade" value="1" <?php echo checked('trade', 1); ?>>
Un autre exemple pour montrer une certaine variation dans la façon dont ces balises pourraient apparaître dans le perl/html:
<INPUT type="radio" name="loantype" value="new" $checked{loantype}->{new}>
<INPUT type="radio" name="loantype" value="new" $checked{'loantype'}->{new}>
<INPUT type="radio" name="loantype" value="new" $checked{'loantype'}->{'new'}>
<INPUT type="radio" name="loantype" value="new" $checked{loantype}->{'new'}>
Comme vous pouvez le voir, les guillemets peuvent être n'importe où, mais ce n'est pas mon problème. J'ai décidé d'écrire une regex de recherche/remplacement dans textmate pour rendre ma vie un peu plus facile. Mon Regex ressemble:
Find: \$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}
Replace: <?php echo checked('$1', '$2'); ?>
Cela a bien fonctionné dans le premier dossier que je l'ai fait avec, mais pour une raison quelconque dans le fichier actuel est devenu le Regex vraiment gourmand, correspondant à de nombreuses lignes. cela correspondra au début (\ $ checked ...), puis correspondra à la dernière fois que le caractère '}' apparaîtra. J'ai essayé quelques variantes pour le rendre un peu moins gourmand dont:
^(.*)\$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}(.*)$
Mais même cela semble correspondre à plusieurs lignes. Je supposais que le^au début ne ferait que correspondre au début d'une ligne, et le $ à la fin ne correspondrait qu'à la fin ... contraindre ma correspondance à 1 ligne ... mais ce n'est pas le cas.
/me manque à regex
Merci pour toute aide, Mike
Merci, cela fonctionne parfaitement. –