[英]Reformat PHP code with Perl
想象一下,我們有以下PHP代碼:
if (true)
{
doSomething();
}
但我們希望:
if (true) {
doSomething();
}
我想我們可以使用Perl就地批量編輯工具在整個代碼庫中進行這種更改。
但是我無法讓它匹配換行符后跟空格然后是大括號。
這就是我正在嘗試的
perl -pi -w -e 's/if(.*)\n\s+\{/if$1 \{/g' testfile.php
我完全失去了; 如果我不包括空格和大括號,它匹配。 但這不是很有幫助。
使用-p
使Perl循環遍歷文件的行,一次一行,從而阻止您在多行上匹配內容。
您可以使用-0
將輸入記錄分隔符設置為null,並使Perl立即讀取整個文件。 (見perlrun 。)
你可以嘗試這樣的事情:
perl -p0iwe 's/\bif\b(.*)\n\s*\{/if$1 \{/g' test.php
請注意,這不是編輯PHP的好方法。 字符串,注釋和文件的文本內容只是容易打破這種簡單解決方案的一些事情。 我建議為這份工作找到合適的工具。 一些編輯器/ IDE支持(重新)格式化代碼,也許您可以嘗試其中一種。
如果您想更改Perl代碼庫,我強烈建議您使用Perl :: Tidy 。 但我認為,PHP有一個類似的工具。
您將瀏覽一次可能的選項並定義您的首選樣式。 將其保存在配置文件中並重新格式化整個代碼庫。 您甚至可以將此步驟作為提交掛鈎添加到您的版本控制系統,以獲得一致的外觀。
這比任何正則表達式都有兩大優勢:
if
沒有檢測或另一構建體,其匹配正則表達式,但不應該被替換。 在最好的情況下,您的重整器崩潰,您必須調整您的正則表達式。 在最壞的情況下,重組器會在您的代碼中引入錯誤,您甚至不會注意到 - 直到代碼運行。 使用Perl :: Tidy或其命令行工具perltidy。
我建議您使用PHP代碼並在一段時間后重新格式化源代碼。 將它按塊復制並粘貼到一個空文本文件中(以便PHP片段仍然是語法上有效的Perl代碼),然后對該文件進行處理。 如果足夠,請替換回您的PHP代碼文件。
這樣,您可以使用Perl :: Tidy來格式化復雜的嵌套PHP數據結構(總比沒有好)。
perltidy不能用於格式化通用PHP代碼(僅作為示例,PHP的/ * * / C風格的多行注釋是perltidy的問題)
AFAIK知道,沒有像perltidy那樣功能強大的PHP美化器。 幾年前我一直在尋找這個; 所以同時,事情可能已經改變了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.