我发现这篇文章,最佳答案 ( /\G {2}/
) 适用于一行,但我无法让它在多行中工作。
它需要将 2 个空格转换为制表符,但仅限于行首。这是一个例子: http: //pastebin.com/4LQ3FUA
任何帮助将不胜感激,得到一个完整的项目来转换......
我发现这篇文章,最佳答案 ( /\G {2}/
) 适用于一行,但我无法让它在多行中工作。
它需要将 2 个空格转换为制表符,但仅限于行首。这是一个例子: http: //pastebin.com/4LQ3FUA
任何帮助将不胜感激,得到一个完整的项目来转换......
您的解决方案可能更好,但这是一个纯正则表达式版本:
$result = preg_replace('/(?:\G|^) {2}/m', "\t", $subject);
^
在多行模式下,允许它匹配行中的第一对空格,然后将该行中的\G
任何后续匹配链接到第一个空格。
我找不到可以一次在整个文件上使用的正则表达式,所以我创建了一个小脚本来递归遍历一个目录并单独更改每个 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));
}
?>