2017-05-25 88 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