正则表达式将空格转换为制表符,但仅限于行的开头

时间:2013-06-28 11:06:08

标签: regex tabs coding-style replace space

我发现this post,最佳答案(/\G {2}/)适用于一行,但我不能让它在多行工作。

它需要将2个空格转换为制表符,但仅限于行的开头。这是一个例子:http://pastebin.com/4LQ3FUAs

任何帮助将不胜感激,有一个完整的项目转换...

2 个答案:

答案 0 :(得分:2)

您的解决方案可能更好,但这是纯正的正则表达式版本:

$result = preg_replace('/(?:\G|^) {2}/m', "\t", $subject);
多行模式下的

^允许它匹配行中的第一对空格,然后\G将该行中的任何后续匹配链接到第一行。

答案 1 :(得分: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));
}
?>