いくつかのレガシー perl cgi フォームを PHP に変換するプロジェクトを持っています。これの多くは、情報の検索/置換を必要とします。そのような場合、perl スクリプトに次のような行があります。
<INPUT type="radio" name="trade" value="1" $checked{trade}->{1}>
読む必要があるもの:
<INPUT type="radio" name="trade" value="1" <?php echo checked('trade', 1); ?>>
これらのタグが 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'}>
ご覧のとおり、引用符はどこにでもある可能性がありますが、それは私の問題ではありません。私の人生を少し楽にするために、テキストメイトで検索/置換正規表現を書くことにしました。私の正規表現は次のようになります。
Find: \$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}
Replace: <?php echo checked('$1', '$2'); ?>
これは、最初に使用したファイルでは問題なく機能しましたが、現在のファイルでは、何らかの理由で正規表現が非常に貪欲になり、多くの行が一致しています。先頭 (\$checked...) に一致し、最後に文字 '}' が現れるまで一致します。貪欲さを少し減らすために、次のようないくつかのバリエーションを試しました。
^(.*)\$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}(.*)$
しかし、それでも複数の行に一致するようです。最初の ^ は行の先頭にのみ一致し、最後の $ は最後にのみ一致すると想定しました...一致を1行に制限します...しかし、そうではないようです。
/me は正規表現で失敗します
助けてくれてありがとう、マイク