Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 20.12.2012
Сообщений: 27

Замена текста с регуляркой

14.09.2016, 09:03. Показов 1076. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В статьях встречаются макросы вида: {[image:37539]}
Где 37539 - id картинки из базы, нужно вытащить это id, и заменить весь макрос {[image:37539]} на строку - пути имени к картинке (по id будет браться путь к картинке из базы)
Помогите с примером кода. Буду очень благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.09.2016, 09:03
Ответы с готовыми решениями:

Как регуляркой перенести конец текста строки в начало строки?
Не совсем по теме, не знал куда вопрос отнести. Есть огромное кол-во файлов с названием типа: название (??????).pdf Необходимо...

Замена нескольких значений регуляркой по шаблону
Здравствуйте! Подскажите, пожалуйста, как решить такую задачу, вчера сидела-сидела, так и не поняла, где ошиблась. Есть фраза, для...

Парсинг текста регуляркой
Доброго времени суток. Есть тект "paymentStatus":"not-paid","leftDays":46,"billDate":"23.05.2017","billFor":"Штраф по...

7
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
14.09.2016, 10:11
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace /* global */ {
 
    function test() {
        $images = [
            '37539' => 'some.png'
        ];
        $expr = '(?<=\\{\\[image:)\d+(?=]})';
        $text = '{[image:37539]}';
        preg_match_all("~{$expr}~", $text, $m);
        print_r($m);
 
        $expr = '\\{\\[image:(\d+)]}';
        $result = preg_replace_callback(
            "~{$expr}~",
            function ($m) use($images) {
                return "<image src='{$images[$m[1]]}>'";
            },
            $text
        );
        var_dump($result);
    }
    test();
}
http://ideone.com/SVqk6t
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
14.09.2016, 12:37
Цитата Сообщение от Cra3y Посмотреть сообщение
image
img

PHP
1
2
3
4
5
6
7
8
9
10
$images = [
            '37539' => 'some.png',
            '37540' => 'some1.png',
            '37541' => 'some3.png',
        ];
$text = 'Текст {[image:37539]} Текст {[image:37540]} Текс {[image:37541]}';
echo preg_replace_callback("~\\{\\[image:(\\d+)\\]\\}~",function($m) use ($images){
        if(array_key_exists($m[1],$images))
            return "<img src='{$images[$m[1]]}'></img>";
},$text);
2
16.09.2016, 11:13

Не по теме:

Цитата Сообщение от Azdeman Посмотреть сообщение
PHP
1
if(array_key_exists($m[1],$images))
может лучше так?
PHP
1
if(isset($images[$m[1]]))

0
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
16.09.2016, 12:43
можно ещё так
PHP
1
2
3
4
5
6
7
8
9
10
11
$images = [
            '37539' => 'some.png',
            '37540' => 'some1.png',
            '37541' => 'some3.png',
        ];
$text = 'Текст {[image:37539]} Текст {[image:37540]} Текс {[image:37541]}';
foreach ($images as $k => $v) {
    $text = ($_ = preg_replace("~\{\[image:$k\]\}~", "<img src='$v'></img>", $text))
    != $text ? $_ : $text;
}
echo $text;
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
16.09.2016, 14:38
ну как бы можно и так, не знаю, почему никто не предложил такой вариант еще
PHP
1
2
3
echo preg_replace_callback('~\\{\\[image:(' . join('|', array_keys($images)) . ')\\]\\}~', function($m) use($images) {
    return $images[$m[1]];
}, $text);
Это, по сути, тот же вариант, что был выше, только без ненужной проверки значения на существование

Добавлено через 40 минут
а, и еще вариант без регулярок:
PHP
1
2
3
4
echo strtr($text, array_combine(
    array_map(function($v){ return '{[image:' . $v . ']}'; }, array_keys($images)),
    array_values($images)
));
1
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
16.09.2016, 19:08
Цитата Сообщение от KOPOJI Посмотреть сообщение
а, и еще вариант без регулярок:
Тоже почти такой ток с регуляркой
PHP
1
2
3
4
5
6
7
8
$images = [
            '37539' => 'some.png',
            '37540' => 'some1.png',
            '37541' => 'some3.png',
        ];
$text = 'Текст {[image:37539]} Текст {[image:37540]} Текс {[image:37541]}';
$_ = array_combine(preg_replace("~(\\d+)~",'{[image:$1]}',array_keys($images)),array_values($images));
print strtr($text,$_);
1
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
18.09.2016, 15:59

PHP
1
2
3
4
echo implode('', array_map(function($v) use($images) {
    return preg_match("~image:\d+~", $v) ? 
    "<img src='" . $images[substr($v, strpos($v, ':')+1)] . "'></img>" : $v;
}, preg_split("~(\{\[)|(\]\})~", $text)));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2016, 15:59
Помогаю со студенческими работами здесь

Сохранение форматирования текста при обработке регуляркой
Возникла проблема, мне нужно сохранив форматирование текста удалить html теги. Я сохранил все форматирование...

Очистка повторяющегося в произвольном количестве текста регуляркой
Всем привет! Подскажите пожалуйста, как сделать регуляркой следующую штуку (если это вообще возможно). Есть такой текст: Еще...

Вырезать регуляркой кусок текста с разными условиями
Здравствуйте. Есть определенный кусок текста. Необходимо начиная с определенных слов (особенности репака, особенности repack и т.д.)...

Поиск части текста в диапазоне ячеек и замена этого текста на найденное соответсвие
Имеется список адресов, которым нужно присвоить в отдельной ячейке название микрорайона. Есть отдельная таблица с названиями микрорайонов и...

Шифрование текста, табличная замена текста
Один из простейших способов шифровки текста состоит в табличной замене каждого символа другим символом - его шифром. Выбрать некоторую...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru