Frage

Ich habe ein Projekt habe ich arbeite einige ältere Perl-CGI-Formulare PHP auf konvertieren. Eine Menge davon erfordert Erkenntnis / ersetzen Informationen. In einem solchen Fall habe ich Zeilen wie diese in der Perl-Skript:

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

, welche Bedürfnisse zu lesen:

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

Ein weiteres Beispiel für Abwechslung in zeigen, wie diese Tags in der Perl / html auftauchen könnten:

<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'}>

Wie Sie sehen können, können die Anführungszeichen überall sein, aber das ist nicht mein Problem. Ich beschloss, ein Suchen / Ersetzen Regex in Textmate zu schreiben, um mein Leben ein bisschen leichter zu machen. Mein Regex wie folgt aussieht:

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

Das funktionierte gut in der ersten Datei mit ich es tat, aber aus irgendeinem Grund in der aktuellen Datei hat die Regex sich wirklich gierig, passend zu viele Zeilen. es wird die begininng passen (\ $ geprüft ...) und dann erscheint das Zeichen zum letzten Mal zusammenpassen ‚}‘. Ich habe ein paar Variationen versucht, um es ein bisschen weniger gierig wie:

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

Aber auch das scheint mehrere Zeilen zu entsprechen. Ich nahm die ^ am Anfang nur den Anfang einer Zeile passen würde, und die $ am Ende würde das Ende nur passen ... beschränke mein Spiel zu 1 Zeile ... aber es funktioniert nicht wie es scheint.

/ me versagt bei regex

Vielen Dank für jede Hilfe, Mike

War es hilfreich?

Lösung

Versuchen Sie folgendes:

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

Die ? nach * und + machen sie "genügsam".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top