1

この投稿を見つけました。一番上の回答 ( /\G {2}/) は 1 行で完全に機能しますが、複数行で機能させることはできません。

2 つのスペースをタブに変換する必要がありますが、行頭のみです。例を次に示します: http://pastebin.com/4LQ3FUAs

プロジェクト全体を変換する必要があります...

4

2 に答える 2

2

あなたのソリューションはおそらく優れていますが、純粋な正規表現バージョンは次のとおりです。

$result = preg_replace('/(?:\G|^) {2}/m', "\t", $subject);

^複数行モードでは、行の最初のスペースのペアに\G一致し、その行の後続の一致を最初の一致に連鎖させることができます。

于 2013-07-01T11:24:36.397 に答える
0

一度にファイル全体で使用できる正規表現が見つからなかったので、ディレクトリを再帰的に反復し、各 php / js / css ファイルの各行を個別に変更する小さなスクリプトを作成しましたが、非常に高速に実行されます. ディレクトリに cd してスクリプトを実行するだけです。

<?php
$dir   = getcwd();
$it    = new RecursiveDirectoryIterator($dir);
$ii    = new RecursiveIteratorIterator($it);
$files = new RegexIterator($ii, '#^(?:[A-Z]:)?(?:/(?!\.Trash)[^/]+)+/[^/]+\.(?:php|css|js)$#Di');

foreach ($files as $file)
{
    $name   = $file->getPath().'/'.$file->getFileName();
    echo $name."\n";
    $lines  = file($file->getPath().'/'.$file->getFileName());
    $length = count($lines);
    for ($i = 0; $i < $length; ++$i)
    {
        $lines[$i] = preg_replace('/\G {2}/', "\t", $lines[$i]);
    }
    file_put_contents($name, implode('', $lines));
}
?>
于 2013-07-01T09:30:07.283 に答える