删除包含开始php标记和空行

时间:2017-05-25 16:26:22

标签: php regex linux bash

我正在使用我继承的遗留PHP项​​目,该项目有超过一千个文件,除了包括其他类之外什么都没有。现在我已经重构它以使用composer,并使用PHPstorm删除包含类的引用,我有超过1200个文件,只有一个开放的php标记和一些空行。

我能够使用此正则表达式找到它们:\<\?php\n^(\s*$){1,}\z

然而,当我尝试用什么都没有替换它时,或者用DELETEME之类的字符串替换它时,PhpStorm实际上不会替换它。

有没有办法通过命令行我可以递归搜索只包含一个开放的PHP标记和空行的文件,然后删除这些文件?

1 个答案:

答案 0 :(得分: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

<小时/> 在 glob() 的帮助PHP中,这将是:

<?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的演示。