Справка по Поиску Замены регулярного выражения Textmate

StackOverflow https://stackoverflow.com/questions/401067

Вопрос

У меня есть проект, над которым я работаю, конвертируя некоторые устаревшие 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\{'?([^']+?)'?\}->\{'?([^']+?)'?\}(.*?)$

Тот Самый ? после * и + сделайте их "нежадными".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top