Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Raisin Zn
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 965

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

07.02.2017, 13:00. Показов 1541. Ответов 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 / 2263 / 346
Регистрация: 10.12.2013
Сообщений: 7,826
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 / 2263 / 346
Регистрация: 10.12.2013
Сообщений: 7,826
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru