簡體   English   中英

使用Perl重新格式化PHP代碼

[英]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有一個類似的工具。

您將瀏覽一次可能的選項並定義您的首選樣式。 將其保存在配置文件中並重新格式化整個代碼庫。 您甚至可以將此步驟作為提交掛鈎添加到您的版本控制系統,以獲得一致的外觀。

這比任何正則表達式都有兩大優勢:

  1. 您可以節省時間,因為您可以在一次運行中定義所有樣式首選項。 假設需要兩個小時。 我沒有看到你在同一時間編寫涵蓋相同數量選項的正則表達式。
  2. 更重要的是(雖然你可能會說,這種情況從未發生過,但肯定會發生):遲早你會得到一些特殊的代碼,這些代碼不在你的正則表達式中。 可以是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM