想象一下,我们有以下PHP代码:
if (true)
{
doSomething();
}
但我们希望:
if (true) {
doSomething();
}
我认为我们可以使用Perl就地批量编辑工具在整个代码库中进行这种更改。
但是我无法让它匹配换行符后跟空格然后支撑。
这是我正在尝试的事情
perl -pi -w -e 's/if(.*)\n\s+\{/if$1 \{/g' testfile.php
我完全失去了;如果我不包括空格和大括号,它匹配。但那不是很有帮助。
答案 0 :(得分:3)
使用-p
使Perl循环遍历文件的行,一次一行,从而阻止您在多行上匹配内容。
您可以使用-0
将输入记录分隔符设置为null,并使Perl立即读取整个文件。 (见perlrun。)
您可以尝试这样的事情:
perl -p0iwe 's/\bif\b(.*)\n\s*\{/if$1 \{/g' test.php
请注意,这不是编辑PHP的好方法。字符串,注释和文件的文本内容只是容易打破这种简单解决方案的一些事情。我建议为这份工作找到合适的工具。一些编辑器/ IDE支持(重新)格式化代码,也许您可以尝试其中一种。
答案 1 :(得分:1)
如果您想更改Perl代码库,我强烈建议您使用Perl::Tidy。但我认为,PHP有一个类似的工具。
您可以浏览一次可能的选项并定义您喜欢的样式。将其保存在配置文件中并重新格式化整个代码库。您甚至可以将此步骤作为提交挂钩添加到您的版本控制系统,以使其具有一致的外观。
与正则表达式相比,它有两大优势:
if
或与正则表达式匹配的其他构造,但不应替换。在最好的情况下,您的重整器崩溃,您必须调整您的正则表达式。在最糟糕的情况下,重组器会在您的代码中引入错误,您甚至不会注意到 - 直到代码运行。答案 2 :(得分:0)
使用Perl :: Tidy或其命令行工具perltidy。
我建议您使用PHP代码并在一段时间后重新格式化源代码。将它按块复制并粘贴到一个空文本文件中(以便PHP片段仍然是语法上有效的Perl代码),然后对该文件进行处理。如果足够,请替换回您的PHP代码文件。
这样,您可以使用Perl :: Tidy格式化复杂的,嵌套的PHP数据结构(总比没有好)。
perltidy不能用于格式化通用PHP代码(仅作为示例,PHP的/ * * / C风格的多行注释是perltidy的问题)
AFAIK知道,没有像perltidy那样强大的PHP美化器。几年前我一直在寻找这个;所以同时,事情可能已经改变了。