我正在使用我继承的遗留PHP项目,该项目有超过一千个文件,除了包括其他类之外什么都没有。现在我已经重构它以使用composer,并使用PHPstorm删除包含类的引用,我有超过1200个文件,只有一个开放的php标记和一些空行。
我能够使用此正则表达式找到它们:\<\?php\n^(\s*$){1,}\z
然而,当我尝试用什么都没有替换它时,或者用DELETEME
之类的字符串替换它时,PhpStorm实际上不会替换它。
有没有办法通过命令行我可以递归搜索只包含一个开放的PHP标记和空行的文件,然后删除这些文件?
答案 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的演示。