2017-05-25 60 views
1

我正在使用遺留的PHP項目,我繼承了超過一千個文件,其中只包含其他類。現在我已經將它重構爲使用composer,並且使用PHPstorm來刪除引用來包含這些類,我有超過1200個文件,只有一個開放的php標記和一些空行。刪除包含開放php標籤和空行的文件

我能夠用這個表達式來找到他們:\<\?php\n^(\s*$){1,}\z

然而,當我嘗試替換什麼也沒有,或者像DELETEME PhpStorm字符串將不做實質更換。

有沒有一種方法可以通過命令行遞歸搜索僅包含開頭PHP標籤和空行的文件,然後刪除這些文件?

+0

仍然不確定是要刪除文件,還是隻替換標記。 [這](https://stackoverflow.com/a/15402972/7544655)rezizter的答案應該可以幫到你。 – doriclazar

+0

對不起,我想刪除該文件。 – Rory

回答

2

您可以使用不太知名的圖案:\Q...\E。這使得兩者之間的一切,因爲它是,所以你不需要逃避任何特殊字符:

\A  # the very start of the string 
\Q<?php\E # <?php 
\s+  # whitespaces including newlines, at least once 
\Q?>\E # ?> 
\Z  # the very end of the string 


PHPglob()的幫助下,這將是:

<?php 
$regex = '~\A\Q<?php\E\s+\Q?>\E\Z~'; 

foreach (glob("*.php") as $file) { 
    $content = file_get_contents($file); 
    if (preg_match($regex, $content)) { 
     // do sth. here 
     // e.g. delete the file 
    } 
} 
?> 

查看regex on regex101.com的演示。

+1

謝謝Jan,那正是我需要的。我使用RecursiveDirectoryIterator而不是glob,因爲我的文件沒有結束標記,所以我稍微修改了一下。我把解決方案放在這裏,以防其他人需要這個。 https://gist.github.com/rorymcdaniel/8d359ffe457de1dd7765bb7669446ba7 – Rory