С Новым годом! Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313

Множественная замена кода

04.01.2017, 10:38. Показов 1244. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как можно быстро заменить строки в коде?
Допустим имеются такие строки в коде:
PHP
1
2
3
4
5
6
7
8
'li': [
    '- тестовая строка1',
    '- тестовая строка2'
],
'li': [
    '- тестовая строка3',
    '- тестовая строка4'
],
после множественной замены должно стать так:
PHP
1
2
3
4
5
<li>- тестовая строка1</li>
<li>- тестовая строка2</li>
 
<li>- тестовая строка3</li>
<li>- тестовая строка4</li>
в phpstorme я использовал такое рег-е выражение:
\'li\': \[\s* \s*(?:\'(.+)\'\,?)+
<li>$1</li> - замена по шаблону
но под этот шаблон попадает только последняя строка, т.е. или '- тестовая строка2' или '- тестовая строка4'
Как правильно быстро заменять нужные строки?

Добавлено через 3 минуты
т.е. имеется ввиду не обработка строк непосредственно из кода с помощью функций типа preg_match, а обработка строк из редактора, ide с помощью горячих клавиш

Добавлено через 11 часов 21 минуту
у кого какие идеи?
Может быть в notepad++ удобней делать множественную замену?

Добавлено через 37 секунд
как тогда это сделать в notepad++ ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2017, 10:38
Ответы с готовыми решениями:

Замена символа на их сочетание - происходит множественная замена
примером есть у меня текст типа &quot;globus&quot; замена у меня происходит так: gg = gg.Replace(&quot;a&quot;, &quot;1bf&quot;); ...

Множественная замена в строке
допустим есть строка s и в ней нужно заменить множество вхождений, делаю я примитивно так: s = s.Replace(&quot;aaa&quot;,...

str_replace и множественная замена
есть два массива $mas1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9); $mas2 = array(6, 25, 20, 25, 50, 25, 30, 40, 10); и переменная $x с числом...

6
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.01.2017, 20:18
Цитата Сообщение от phpk Посмотреть сообщение
я использовал такое рег-е выражение
Как в том анекдоте: теперь у вас две проблемы.

В общем случае регулярками задача не решается. Для конкретного случая написать выражение можно.
Цитата Сообщение от phpk Посмотреть сообщение
\'li\': \[\s* \s*(?:\'(.+)\'\,?)+
<li>$1</li> - замена по шаблону
Проблема в том, что пытаетесь регуляркой реализовать вложенный цикл. Естественно, во внутреннюю группу попадет не более одного совпадения.

Code
1
2
3
4
5
6
7
8
# Две альтернативы
 
# Первая: строки вида 'li': [ 'text' заменяем на text
( 'li'\s*:\s*\[\s*'([^']+?)'
 
# Вторая: строки вида ,'text' и ,'text'], заменяем на text
| \s*,\s*'([^']+?)'(\s*],?\s*)?
)
В одну строку:
Code
1
('li'\s*:\s*\[\s*'([^']+?)'|\s*,\s*'([^']+?)'(\s*],?\s*)?)
https://regex101.com/r/BUzDuI/1

Решение покрывает единственный частный случай из первого поста.

Откуда возникла такая потребность? Почему код пишется сначала в приведенном формате, а затем конвертируется в html?
1
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
05.01.2017, 01:33  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Откуда возникла такая потребность? Почему код пишется сначала в приведенном формате, а затем конвертируется в html?
просто код сначала был написан на jade, потом пришлось его перенести в php

Добавлено через 1 час 3 минуты
0x10, кстати ваше рег-е выражение не подходит!
это 'li'\s*:\s*\[\s*'([^']+?)' находит только 1-ю строку и двух этих:
PHP
1
2
3
4
'li': [
    '- тестовая строка1',
    '- тестовая строка2'
],
а это ('li'\s*:\s*\[\s*'([^']+?)'|\s*,\s*'([^']+?)'(\s*],?\s*)?) находит совсем не то, что нужно.
Под это выражение подпадает лишнее

Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
Проблема в том, что пытаетесь регуляркой реализовать вложенный цикл.
Объясните пож-та, что подразумевается под вложенный цикл?
Это тот же цикл, что и в php, типа for?

Добавлено через 1 час 45 минут
PHP
1
2
3
4
'li': [
    '- тестовая строка1',
    '- тестовая строка2'
],
т.е. 'li' - эту 1ю строку трогать не нужно, её не нужно переименовывать в <li>. Нужно найти эти строки '- тестовая строка1',
и обернуть их в тег li

Добавлено через 1 минуту
1я строка 'li': [ просто как ориентир, за которым идут нужные строки, которые нужно обернуть в li.
Там просто не только этот код с тегами li
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
05.01.2017, 08:45
Цитата Сообщение от phpk Посмотреть сообщение
а это ('li'\s*:\s*\[\s*'([^']+?)'|\s*,\s*'([^']+?)'(\s*],?\s*)?) находит совсем не то, что нужно.
Под это выражение подпадает лишнее
Очень понятное описание проблемы, да. Что «находит не то», что «попадает лишнее»? Не просто же так выше была приведена ссылка, где выражение расписано аж в трех вариантах: подсвечены отдельные блоки, выделено каждое совпадение. Там же можно увидеть, что первый элемент каждого списка попадает во вторую группу, а последующие — в третью. Следовательно, шаблон для замены должен выглядеть как <li>$2$3</li>
Посмотреть в действии можно здесь: http://regexr.com/3f0fo

Цитата Сообщение от phpk Посмотреть сообщение
Объясните пож-та, что подразумевается под вложенный цикл?
Это тот же цикл, что и в php, типа for?
Это была аналогия, которой я пытался донести единственную мысль: в вашей регулярнке во вложенную группу не могут попать все соответствующие ей шаблоны. Сама же регулярка была написана примерно по той же логике, по которой можно было бы писать обход иерархической структуры приведенного шаблона.

Цитата Сообщение от phpk Посмотреть сообщение
т.е. 'li' - эту 1ю строку трогать не нужно, её не нужно переименовывать в <li>
В первом посте был пример: первый фрагмент кода полностью заменить на второй фрагмент. Все остальные объяснения сформулированы непонятно.

Еще раз: для этой задачи не подходят регулярки.
Цитата Сообщение от phpk Посмотреть сообщение
просто код сначала был написан на jade
Что мешало взять этот препроцессор и пропустить через него исходник, получив на выходе html?
0
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
05.01.2017, 09:58  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Что мешало взять этот препроцессор и пропустить через него исходник, получив на выходе html?
препроцессор здесь совсем не при чём. Это ведь наверно обычная ситуация для программиста, когда нужно заменить проблемный код, особенно при работе с нудным заказчиком.
Код был сначала на jade со всеми li, этих li очень много, также как и ul. Теперь нужно сделать обычный цикл php с одним только блоком ul, и вытаскивая из базы данные с этим текстом:
- тестовая строка1
- тестовая строка2
нужно этот текст оборачивать в тег li.
Сейчас стоит задачи вырезать текст и поместить его в базу данных.
Парсинг опять же меня сейчас не интересует. Мне хотелось-бы понять, как можно заменять быстро текст в коде.
Текст может быть не обязательно в 2е строки, может быть и в 3:
PHP
1
2
3
4
5
6
7
8
9
'li': [
    '- тестовая строка1',
    '- тестовая строка2'
],
'li': [
    '- тестовая строка3',
    '- тестовая строка4',
    '- тестовая строка5'
],
в конце текста не обязательно есть цифры.
Я в самом начале привёл пример,
PHP
1
\'li\': \[\s* \s*(?:\'(.+)\'\,?)+
этот код выбирает только последнюю строку.
как его нужно доработать, чтобы выбирались все строки?
С регулярками ещё мало работал
А этот код:
PHP
1
'li'\s*:\s*\[\s*'([^']+?)'|\s*,\s*'([^']+?)'(\s*],?\s*)?
заменяет и это 'li': [ и то, что не относится к тексту и li
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
05.01.2017, 10:16
В теме три поста и три разные постановки задачи. Отсюда и непонимание.

Задача в первом посте: «Преобразовать разметку вида 1 в html вида 2, вот пример». Пример решения привел.
Вторая постановка задачи: выясняется, что исходный текст — специальный dsl, который нужно сконвертить в html. Ок, меняем способ решения задачи с регулярок на использование препроцессора.
Третья постановка задачи: внезапно нужно не конвертировать текст, а перенести текст из шаблона в базу. Извлечь строки можно даже ровно той же регуляркой, что приводил выше, но как это поможет перенести элементы в базу и почему это нужно делать обязательно в редакторе — мне непонятно.

В общем, классическая The XY problem.
0
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
06.01.2017, 00:34  [ТС]
Отсюда и непонимание
Откуда возникла такая потребность?]
я просто ответил на ваш вопрос, но ваш ответ так и не подошел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2017, 00:34
Помогаю со студенческими работами здесь

Множественная замена в тексте
Пишу мини-транслятор..столкнулся с проблемой: не могу заменить несколько слов Dim File As New StreamWriter(&quot;C:\test.pas&quot;) ...

Множественная замена текста в файле
Добрый день! Нужно в выбранном файле сделать множественные замены текста (5 переменных со значениями) в разных строках. Нашел пример типа...

Множественная замена цвета на картинке
Здравствуйте, столкнулся с задачей замены ОДНОГО И ТОГОЖЕ цвета на картинке на множество вариантов (ок. 500) каждый вариант нужно сохранять...

Множественная замена подстрок в строке
Добрый день! Не могу понять в чем дело. Кодю на C. Компилю gcc под Centos 7. Частная задача: Есть шаблон строки в которой нужно...

Замена програмно куска кода в файле .php другим куском кода
Мне необходимо програмно заменить кусок кода в файле .php Есть файл .php, в котором надо заменить кусок кода другим куском кода. Для...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru