Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965

Замена пробелов в начале строки

07.02.2017, 13:00. Показов 1547. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Необходимо заменить четыре пробела на табуляцию, что находятся перед строчкой кода, а если есть четыре пробела в самом коде, то заменять не надо, только перед строкой.
Делаю так:
PHP
1
        $codes[$i] = preg_replace('| {4}|', "\t", $codes[$i]);
Заменяется по всей строчке...
Подскажите, что надо дописать, чтобы заменялось только перед строкой.
Пример строки:
PHP
1
2
                    'field'         => array('video_id', 'title'),
                    'table'         => 'video',
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2017, 13:00
Ответы с готовыми решениями:

Удаление пробелов в начале строки
var s:string; begin while (s=' ')and(s<>'') do delete(s,1,1); end; почему если не ставить после s= кавычки с пробелом(а...

Устранение пробелов в начале и конце строки
Кто может посоветовать что-нибудь стройное и красивое по поводу REPLACE всех вхождений в строковой переменной, а не первого? И второй...

Удаление пробелов в начале и в конце строки
Ошибка: Встречено ';', а ожидалось ':' (в первой строке после filtr). Как исправить , почему ругается , не понимаю( function filtr; var...

10
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
07.02.2017, 13:07
Можно взять IDE, установить правила форматирования и применить ко всем файлам.

Если хотите с помощью PHP, то можно обрабатывать построчно. Функция file() сразу вернёт массив из строк. Обрабатываем каждую строку: берём 4 первых символа, если пробелы - заменяем, затем смотрим 2-5 символы, если пробелы - заменяем и т.д.

Либо можно сохранить длину строки, затем ltrim(), и добавляем табы. Количество считаем по формуле tabs = (old_len - new_len) / 4
0
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
07.02.2017, 13:09  [ТС]
Jodah, то есть регулярным выражением этого сделать не получится?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
07.02.2017, 13:12
Raisin Zn, а, не обратил внимания на раздел.

Можно, но в регулярках слаб, может кто ещё подскажет.
0
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
07.02.2017, 13:24  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
а, не обратил внимания на раздел
Бывает!
Цитата Сообщение от Jodah Посмотреть сообщение
может кто ещё подскажет
Надеюсь...
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
07.02.2017, 13:55
сия команда произведёт требуемую замену во всех файлах .php с помощью командного
режима и рег.выр. редактора Vim:
bash
Bash
1
vim -es +'bufdo %s/\v^[ ]{4}/\t/ | update' +x *.php
или
cmd
Windows Batch file
1
vim -es +"bufdo %s/\v^[ ]{4}/\t/ | update" +x *.php
1
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
07.02.2017, 13:58  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
с помощью командного режима и рег.выр. редактора Vim
Спасибо, но, мне надо на php....
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
07.02.2017, 14:01
да я понял,
просто решил напомнить народу о существовании полезных инструментов.
можно переоформить на offtop
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
07.02.2017, 14:21
PHP
1
2
3
echo "<pre/>";
    $_ = '    video';
    echo preg_replace("~^\\s{4}~","\t",$_);
Добавлено через 2 минуты
Цитата Сообщение от Jodah Посмотреть сообщение
Обрабатываем каждую строку: берём 4 первых символа, если пробелы - заменяем, затем смотрим 2-5 символы, если пробелы - заменяем и т.д.

Не по теме:

%-):swoon:

0
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965
07.02.2017, 14:27  [ТС]
Вот чего намутил:
PHP
1
2
        preg_match('#^( {4}|[\t])*#', $codes[$i], $match);
        $codes[$i] = preg_replace('| {4}|', "\t", $match[0]) . trim($codes[$i]);
Azdeman, ваш код почему то из четырех табуляций делает две...
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
07.02.2017, 14:58
Табуляция.
PHP
1
2
3
echo "<pre/>";
    $_ = '    video';
    echo preg_replace("~^\\s{4}~uis","  ",$_);
Добавлено через 1 минуту
Цитата Сообщение от Raisin Zn Посмотреть сообщение
PHP
1
2
preg_match('#^( {4}|[\t])*#', $codes[$i], $match);
$codes[$i] = preg_replace('| {4}|', "\t", $match[0]) . trim($codes[$i]);
PHP
1
$codes[$i] = preg_replace('|^ {4}|', "  ", $codes[$i]) . trim($codes[$i]);
PHP
1
2
3
4
5
6
<?php
echo "<pre/>";
foreach(['    s    a','    a    s'] as $v){
        $a[] =preg_replace("|^ {4}|","  ",$v);
}
print_r($a);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2017, 14:58
Помогаю со студенческими работами здесь

Отрезание пробелов в начале и в конце строки
Разработайте функцию std::string Trims(std::string const&amp; str), выполняющую отрезание пробелов в начале и в конце строки str, и...

Удаление пробелов в начале строки. Из .com в .exe
Пробую переписать программу в exe, не получается Рабочий вариант в .com формате .model tiny .286 .code org 100h start: mov...

Удаление лишних пробелов в начале и конце строки.
Нужно написать функцию char*alltrim(char*string) для удаления пробелов в начале и конце строки с помощью указателей. Помогите завершить...

Реализовать в виде модуля набор подпрограмм удаление пробелов в начале строки
Всем здарова проблема с расстановкой фактических параметров в функции при её вызове. Реализовать в виде модуля набор подпрограмм 1)...

Объединение txt файлов и замена значений в начале строки
Добрый день всем! помогите пожалуйста то скриптом есть несколько TXT файлов вида: #Plate Position Sample ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru