Как массово изменить структуру кода и проитерировать числа в нем?

333
30 января 2017, 20:10

Всем доброй ночи.

Имеется такой html код:

<div class="test" title="Подсказка"><span><img src="/images.png" alt="картинка"></span><span>Текст</span></div>

Таких строк есть порядка 800 штук (все они однотипны) меняется только "Подсказка", "/images.png" и "Текст"

Сейчас возникла необходимость изменить структуру, на такую:

<div class="test"><span>#1</span><span><img src="/images.png" alt="картинка"></span><span>Текст</span><span>Подсказка</span></div>

Возможно ли это сделать на автомате? или придется все переделывать ручками?

Answer 1

Я так понял, что #1 - это итерационный элемент, т.е. для него нужно в каждом последующем случае делать +1.

Написал вам скрипт, где некий файл file.html (вы можете самостоятельно изменить название файла) приводится к нужной вам структуре и сохраняется в файл fileNew.html . Для того, чтобы запустить скрипт, нужно, чтобы у вас был установлен пхп, далее вам нужно в папку где содержится этот file.html поместить этот скрипт (к примеру, создать файл php.php) и запустить его (например, вызвать через браузер адрес типа: http://ваш_сайт.ру/папка_где_лежит_хтмл/php.php .

<?php
$file = __DIR__.'/file.html';
$text = file_get_contents($file);
$pattern = '/<div class="test" title="([^"]+)"><span>(<img [^>]+>)<\/span><span>(.*?)<\/span><\/div>/imsu';
$_GET['i'] = 0;
$textNew = preg_replace_callback($pattern, 'myReplace', $text);
function myReplace($matches) {
    $_GET['i']++;
    return '<div class="test"><span>#'.$_GET['i'].'</span><span>'.$matches[2].'</span><span>'.$matches[3].'</span><span>'.$matches[1].'</span></div>';
}
$fileNew = __DIR__.'/fileNew.html';
file_put_contents($fileNew, $textNew);
Answer 2

В общем случае есть два варианта, как вы можете попробовать сделать это, и оба они будут зависеть от того, каким редактором вы пользуетесь. Я бы посоветовал использовать либо notepad++, либо PHPStorm, во втором случае это уже не просто текстовый редактор, а полноценная IDE (Integrated Development Environment, Интегрированная среда разработки). Либо любой другой редактор, поддерживающий замену текста и/или мультикурсор.

Первый вариант: использовать замену текста, например в notepad++ она вызывается по Ctrl+H, и последовательно заменить все блоки в коде, например первым делом можно поменять <div class="test" title="Подсказка"><span> на <div class="test"><span>.

Но в этом варианте у вас не получится к примеру сделать автоматически нумерацию (цифры после #), только лишь сделать новую структуру кода.

Второй вариант: использовать мультикурсор. Прочитать про него подробнее в случае PHPStorm можно здесь, а в случае с np++ делается это так:

Первым делом эту функцию нужно активировать, в русской версии это делается по такому пути: Опции / Настройки / Правка / Мультиредактирование. Далее с помощью либо функции замены текста, либо самой функции мультикурсора видоизменяете структуру кода, в вашем случае я бы посоветовал использовать замену. И потом делаете нумерацию следующим образом. Выделяете тот кусок текста, после которого должна стоять увеличивающаяся цифра и нажимаете Alt+C, в результате вы увидите окно, где будет два варианта работы, либо "текст для вставки", либо "числа для вставки". Вам нужно будет настроить все вот так:

Обратите внимание, что цифры будут вставляться там, где у вас расположен курсор во время выделения текста. После чего нажимаете ОК и получаете уже такой текст:

Это если вы оставили курсор справа от #. Если вы оставите курсор с левой стороны, то получите такую картину, не запутайтесь:

READ ALSO
Как пополнить баланс на своем сайте через webmoney

Как пополнить баланс на своем сайте через webmoney

Хочу подключить webmoney для пополнения баланса на своем сайте, но не знаю какой интерфейс нуженИ структура api webmoney тоже не понятно

310
INSERT в Базу данных

INSERT в Базу данных

Уже перепроверил с админчасти INSERT отрабатывает, проблема во фронте:

296
Что мешает поменять название корзины на главной странице?

Что мешает поменять название корзины на главной странице?

Пытаюсь в теме поменять название корзины на главной страницеПри обновлении на доли секунды меняется на мою версию

349
Php pop3 получение писем из папок imap

Php pop3 получение писем из папок imap

Добрый деньПолучаю через php-imap список папок на сервере, и получаю список всех писем без привязки к папке

343