Textmate Regex Yardım değiştirin bul

1 Cevap php

Ben PHP bazı eski perl cgi formları dönüştürme üzerinde çalışıyorum bir proje var. Bu bir çok bilgilerinin değiştirilmesini / bulguyu gerektirir. Böyle bir durumda, ben perl komut dosyası bu gibi satırlar vardır:

<INPUT type="radio" name="trade" value="1" $checked{trade}->{1}>

hangi okumak gerekiyor:

<INPUT type="radio" name="trade" value="1" <?php echo checked('trade', 1); ?>>

Başka bir örnek bu etiketleri perl / html göstermek nasıl bazı varyasyon göstermek için:

<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'}>

Gördüğünüz gibi, her yerde tırnak hakkında olabilir, ama bu benim sorunum değil. Ben hayatımı biraz kolaylaştırmak için Textmate bir yerini bulmak / regex yazmaya karar verdim. Benim Regex gibi görünüyor:

Find:     \$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}
Replace:  <?php echo checked('$1', '$2'); ?>

Bu ben yaptım ilk dosyada para cezası çalıştı, ama nedense Geçerli dosyada Regex birçok çizgiler uyan, gerçekten açgözlü hale gelmiştir. Bu begininng maç (\ $ işaretli ...) ve ardından karakter '}' görünen son zamana kadar maç olacak. Ben de dahil olmak üzere biraz daha az açgözlü olmak için birkaç varyasyonları denedim:

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

Ancak bu bile birden fazla satır maç gibi görünüyor. Ben sadece bir satırın başlangıcını maç olur ve sonunda $ sadece 1 hattına benim maç kısıtlayıcı ... sonunu maç olur başında ^ kabul ... ama göründüğü gibi değil.

/ Me regex başarısız oluyor

Thanks for any help, Mike

1 Cevap

Bu deneyin:

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

? * ve + onlara "non-açgözlü" yaptıktan sonra.