Можете помочь с одним регулярным выражением?

Надо найди 2 подряд идущих пробелов и заменить их с \t

Но, заменять нужно только те пробелы которые идут до начало любых других символов.

К примеру строка:
(тут 4-пробела)Текст(тут тоже 4-пробела)
Должна заменяться с этим:
\t\tТекст(тут 4-пробела)

Если использовать
$str = preg_replace('/^ {2}/m', "\t", $str);
То получится "\t(тут 4-пробела)Текст(тут 4-пробела)"

Есть какие нибудь идеи?

-----------

UPD:
Думаю действительно нельзя реализовать это только используя РВ.
Так что вопрос снят. Всем спасибо!
  • Вопрос задан
  • 2506 просмотров
Пригласить эксперта
Ответы на вопрос 4
Tyranron
@Tyranron
Вы можете дополнить регулярку своей логикой в PHP.
function replaceSpacesWithTabs($line, $perTab = 2)
{
    return preg_replace_callback('/^[ ]+/', 
        function ($matches) use ($perTab) {
            $len = strlen($matches[0]);
            $out = str_repeat("\t", floor($len / $perTab));
            if (($rem = $len % $perTab) > 0) {
                $out .= str_repeat(' ', $rem);
            }        
            return $out;
        },
        $line
    ); 
}

Потыкать можно здесь.

На решение чисто регуляркой, по моему мнению, не тянет. Но применить можно вполне себе.
Ответ написан
Комментировать
@Nc_Soft
$str = preg_replace('/\A[ ]{2}/m', "\t", $str);
Ответ написан
shuchkin
@shuchkin
веб-программист, сисадмин, предприниматель
было лень, оставил так

$str = preg_replace('/\n {4}/',"\n\t", $str);
$str = preg_replace('/\n {4}/',"\n\t", $str);
$str = preg_replace('/\n {4}/',"\n\t", $str);
$str = preg_replace('/\n {4}/',"\n\t", $str);
Ответ написан
@zedxxx
Вам принципиально это сделать именно регуляркой? Задача элементарно решается посимвольным сканированием строки с заменой по условию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы