Название: Замена подстрок и escape syntax Отправлено: sergs от Январь 07, 2017, 08:38 Необходимо выполнить замену подстрок в строке, но не просто замену, а учитывать экранирование. Например, есть строка
Код: http://server.com/$user/docs/$version Код: D:\share\$user\$$version Количество подстрок, которые необходимо заменить заранее не известно, но известен список возможных подстрок (т.к. $user, $version и т.д.). Как можно реализовать подобное? Название: Re: Замена подстрок и escape syntax Отправлено: Bepec от Январь 07, 2017, 15:40 Самое простое это
Код: replace( "$$", "@MyCodeEscapeSymbol@"); Название: Re: Замена подстрок и escape syntax Отправлено: m_ax от Январь 07, 2017, 16:50 Цитировать Самое простое это Это самое плохое.. И после этого мы удивляемся, что всё больше и больше, казалось бы нехитрых приложений, отжирают столько памяти, что не напасешься.. Не знаю как сейчас там в Qt, но как вариант это просто реализуется на xpressive Код
output: Код
Название: Re: Замена подстрок и escape syntax Отправлено: Old от Январь 07, 2017, 16:57 Не знаю как сейчас там в Qt, но как вариант это просто реализуется на xpressive m_ax, вы сейчас вероломно зашли на чужую территорию и истоптали все цветы. Берегитесь... ;) ;DНазвание: Re: Замена подстрок и escape syntax Отправлено: kambala от Январь 07, 2017, 17:02 можно делать replace через регулярку QString("(?<!\\$)\\%1").arg("$user" /* сюда вставить элемент массива */)
Название: Re: Замена подстрок и escape syntax Отправлено: m_ax от Январь 07, 2017, 17:06 Цитировать m_ax, вы сейчас вероломно зашли на чужую территорию и истоптали все цветы. Берегитесь... ;) ;D ;D Представил сейчас себе эту картину) Как я цветы им топчу ;D Смотрите, они ещё и вас заодно того..) Название: Re: Замена подстрок и escape syntax Отправлено: m_ax от Январь 07, 2017, 17:24 можно делать replace через регулярку QString("(?<!\\$)\\%1").arg("$user" /* сюда вставить элемент массива */) Слабое место подхода с Qt-шным реплэйсом для данной задачи то, что придётся все N раз (для каждой подстроки) проходится по тексту.. Если мы имеем большой текст и список подстрок, то это, возможно, будет узким местом.. Название: Re: Замена подстрок и escape syntax Отправлено: kambala от Январь 07, 2017, 18:30 да, правда. ну тут можно и без буста распарсить строку в один проход без особых проблем :)
Название: Re: Замена подстрок и escape syntax Отправлено: m_ax от Январь 07, 2017, 18:48 да, правда. ну тут можно и без буста распарсить строку в один проход без особых проблем :) Да, конечно можно) Тут даже тему уже была аналогичная http://www.prog.org.ru/index.php?topic=30197.msg222882#msg222882 (http://www.prog.org.ru/index.php?topic=30197.msg222882#msg222882)Название: Re: Замена подстрок и escape syntax Отправлено: m_ax от Январь 07, 2017, 22:21 Создал тему в кладовке с готовым решением этой проблемы в рамках Qt инструментария http://www.prog.org.ru/topic_30886_0.html (http://www.prog.org.ru/topic_30886_0.html)
Название: Re: Замена подстрок и escape syntax Отправлено: Igors от Январь 08, 2017, 08:14 Это самое плохое.. Ага, а вот это, значит, хорошееИ после этого мы удивляемся, Код
Да и велик можно интересно обобщить, развить - и даже без перекрытия оператора () :) Название: Re: Замена подстрок и escape syntax Отправлено: m_ax от Январь 08, 2017, 16:16 Цитировать Откуда человек об этом может знать? Да ниоткуда, это надо просто "выучить", тупо запомнить, продолбив N дустовских примеров. Да, один раз стоит сделать над собой усилие и разобраться в этом, ничего страшного в этом нет) Даже полезно: как говорил барон Карл Фридрих Иероним фон Мюнхгаузен- мыслящий человек просто обязан время от времени вытягивать себя за волосы из болота) Вместе с конём)Цитировать Мне кажется это не очень творческий процесс :) А никто и не говорит, что это творческий процесс - это обычная рутина, которая должна быстро решаться, надёжно работать и чтоб потом о ней можно уже не вспоминать. А творческий процесс - он то как раз на стадии проектирования, вдали от компьютера, с карандашом и листом бумаги в руках) Ну или доской и маркером - кому как) Название: Re: Замена подстрок и escape syntax Отправлено: Igors от Январь 09, 2017, 08:37 Да, один раз стоит сделать над собой усилие и разобраться в этом, ничего страшного в этом нет) Даже полезно: В свое время китайские товарищи формулировали это примерно такЦитировать Двадцать лет упорного труда - тысяча лет счастья Название: Re: Замена подстрок и escape syntax Отправлено: sergs от Январь 09, 2017, 11:03 m_ax, вариант с boost не подходит. Это новая (и объемная) зависимость в проекте. Но за подсказку спасибо, и за
qRegexReplace тоже. Буду изучать и дорабатывать для поддержки escape syntax. Название: Re: Замена подстрок и escape syntax Отправлено: m_ax от Январь 09, 2017, 12:39 Цитировать Буду изучать и дорабатывать для поддержки escape syntax. А что там дорабатывать? Просто регулярку нужно правильно написать (kambala уже вам её написал):Код
|