2017-05-25 17 views
1

私が継承した何千ものファイルを持っていて他のクラスにも含まれていた従来のPHPプロジェクトで作業しています。コンパイラを使用するようにリファクタリングしてPHPstormを使用してクラスを含むリファレンスを削除したので、オープニングPHPタグといくつかの空白行を除いて1200個以上のファイルがあります。開かれたphpタグと空の行を含むファイルを削除する

私はそれらを見つけるために、この正規表現を使用することができました:\<\?php\n^(\s*$){1,}\z

しかし、私は何も、またはDELETEME PhpStormのような文字列でそれを置換しようとすると、実際に置き換えるんではないでしょう。

オープンしているPHPタグと空行のみを含むファイルを再帰的に検索して削除する方法はありますか?

+0

ファイルを削除するか、タグを置き換えるかどうか不明です。 [this](https://stackoverflow.com/a/15402972/7544655)rezizterからの回答がお手伝いします。 – doriclazar

+0

ご迷惑をおかけして申し訳ございませんが、ファイルを削除します。 – Rory

答えて

2

よく知られていないパターン(\Q...\E)を使用することができます。それがあるので、これは間のすべてを残し、あなたは任意の特殊文字をエスケープする必要はありません。PHP

\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 
$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さん、ありがとうございました。私はglobの代わりにRecursiveDirectoryIteratorを使いました。私のファイルには終了タグがなかったので、少し修正しました。他の誰かがこれを必要とする場合に備えて、私はここに解決策を入れました。 https://gist.github.com/rorymcdaniel/8d359ffe457de1dd7765bb7669446ba7 – Rory

関連する問題