1

いくつかのレガシー 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 は正規表現で失敗します

助けてくれてありがとう、マイク

4

1 に答える 1

2

これを試して:

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

その後?、それら*+「非貪欲」にします。

于 2008-12-30T18:49:30.923 に答える