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