У меня есть проект, который я работаю над преобразованием некоторых устаревших форм 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'}>
Как видите, кавычки могут быть где угодно, но это не моя проблема. Я решил написать регулярное выражение поиска / замены в textmate, чтобы сделать мою жизнь немного проще. Мой Regex выглядит так:
Find: \$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}
Replace: <?php echo checked('$1', '$2'); ?>
Это работало нормально в первом файле, с которым я это делал, но по какой-то причине в текущем файле Regex стал действительно жадным, соответствуя многим строкам. он будет соответствовать началу (\ $ флажок ...), а затем совпадать до последнего раза, когда появится символ '}. Я попробовал несколько вариантов, чтобы сделать его немного менее жадным, включая:
^(.*)\$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}(.*)$
Но даже это, кажется, соответствует нескольким строкам. Я предполагал, что ^ в начале будет соответствовать только началу строки, а $ в конце будет соответствовать только концу ... ограничивая мое совпадение 1 строкой ... но это не так.
/ мне не удается в регулярном выражении
Спасибо за любую помощь,
Mike