Question

J'ai un projet sur lequel je travaille sur la conversion de certaines formes héritées de perl cgi en PHP. Cela nécessite en grande partie de rechercher / remplacer des informations. Dans un cas, j'ai des lignes comme celle-ci dans le script Perl:

<INPUT type="radio" name="trade" value="1" $checked{trade}->{1}>

qui doit être lu:

<INPUT type="radio" name="trade" value="1" <?php echo checked('trade', 1); ?>>

Voici un autre exemple montrant comment ces balises pourraient apparaître dans le fichier 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 constater, les citations peuvent être n'importe où, mais ce n’est pas mon problème. J'ai décidé d'écrire un regex find / replace dans textmate pour me rendre la vie un peu plus facile. Mon regex ressemble à:

Find:     \$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}
Replace:  <?php echo checked('$1', '$2'); ?>

Cela a bien fonctionné dans le premier fichier avec lequel je l’ai fait, mais pour une raison quelconque, dans le fichier actuel, la Regex est devenue vraiment gourmande, correspondant à de nombreuses lignes. cela correspondra au début (\ $ vérifié ...) et ensuite à la dernière fois que le caractère '}' sera apparu. J'ai essayé quelques variantes pour le rendre un peu moins gourmand, notamment:

 ^(.*)\$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}(.*)$

Mais même cela semble correspondre à plusieurs lignes. J'ai supposé que ^ au début ne correspondrait qu'au début d'une ligne, et le $ à la fin ne correspondait qu'à la fin ... contraignant ma correspondance à 1 ligne ... mais ça ne semble pas.

/ moi échoue à l'expression régulière

Merci pour toute aide, Mike

Était-ce utile?

La solution

Essayez ceci:

^(.*?)\$checked\{'?([^']+?)'?\}->\{'?([^']+?)'?\}(.*?)$

Les ? après * et + les rendent "non gourmands".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top