Textmate正则表达式查找替换帮助
问题描述:
我有一个项目,我正在将一些遗留的perl cgi表单转换为PHP。很多这需要查找/替换信息。在这样一个情况下,我在Perl脚本这样行:Textmate正则表达式查找替换帮助
<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 ...),然后匹配上一次出现字符'}'的时间。我尝试了一些变化,使其不太贪心,包括:
^(.*)\$checked\{'?([^']+)'?\}->\{'?([^']+)'?\}(.*)$
但即使这似乎匹配多行。我认为在开始时^只会匹配一行的开始,而$在最后只会匹配结束......将我的匹配限制为1行......但看起来并不是这样。
/我无法在正则表达式
感谢您的帮助, 迈克
答
试试这个:
^(.*?)\$checked\{'?([^']+?)'?\}->\{'?([^']+?)'?\}(.*?)$
的?
*
和+
后让他们 “非贪婪”。
谢谢,这是完美的作品。 – 2008-12-30 18:53:38