Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594

Ищу готовую регулярку для замены символов в конкретных блоках

10.09.2018, 20:14. Показов 1307. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть типа тег/блок в тексте. Например (block)(/block). Вложенность не предусмотрена. Кол-во блоков неограниченно. Режим /uim
Внутри этих блоков нужно удалить (заменить) конкретные символы. Например '<' на '&lt;' и '>' на '&gt;'.
Без использования preg_replace_callback();

Благодарю за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.09.2018, 20:14
Ответы с готовыми решениями:

Составить регулярку для замены тэгов
Есть файл в кодировке UTF-8. Хочу сделать некоторые замены в строках вида &lt;английский текст&gt; (&lt;русский текст&gt;. Например: ...

Составить регулярку для поиска символов
Всем привет! Я снова в тупике. Как всегда:) Хочу сделать так: если пользователь вводит в какое-то поле маленькие латинские бувы -...

Ищу готовую формулу для подготовки к ресайзу
Имею размеры: ширина и высота. К ширине нужно прибавить 1000, а после высчитать высоту. п.с. имею jQuery, если там, что то можно заюзать)

4
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
10.09.2018, 22:42
Лучший ответ Сообщение было отмечено 53ifbb как решение

Решение

https://regex101.com/r/LxqBfx/1/
Code
1
2
3
4
5
6
7
8
9
(?xs)
(?: \G (?!\A)
  | \(block\)
)
(?: (?! \(\/block\) )
    .
)*?
\K
<
1
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
11.09.2018, 01:43  [ТС]
Emilien, мне нужно два символа сразу менять. Это возможно сделать за 1 операцию ?) И так же надо удалять (\/?block), но это я могу str_replace прогнать, не так критично.

Это в 1 строку:
PHP
1
2
3
preg_replace('/(?xs)(?:\G(?!\A)|\(block\))(?:(?!\(\/block\)).)*?\K >/', '&gt;', $text);
preg_replace('/(?xs)(?:\G(?!\A)|\(block\))(?:(?!\(\/block\)).)*?\K </', '&lt;', $text);
str_replace(array('(block)', '(/block)'), '', $text);
Добавлено через 1 час 43 минуты
Emilien, не работает замена для символа '('..
Нужно будет делать замену для тех же символов, что обрамляют блоки.
п.с. сразу не определился с конечным вариантом...
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
11.09.2018, 14:13
Цитата Сообщение от 53ifbb Посмотреть сообщение
Без использования preg_replace_callback();
Чем вам preg_replace_callback() не угодила? Вместо того, что бы писать быдлокод по два вызова preg_replace(), (в то время как достаточно было бы и одного её вызова с передачей массива параметров), да ещё и str_replace() сюда притягивать "за уши", юзайте preg_replace_callback():
PHP
1
2
3
4
5
6
7
8
9
10
11
$str = '<p>text1</p> (block)<p>text2</p>(/block) <p>text3</p>';
 
$str = preg_replace_callback(
    '~\(block\)(.+?)\(/block\)~s',
    function($matches){
        return htmlspecialchars($matches[1]);
    },
    $str
);
 
echo $str;
Добавлено через 5 минут
Результат:
HTML5
1
<p>text1</p> &lt;p&gt;text2&lt;/p&gt; <p>text3</p>
1
55 / 55 / 21
Регистрация: 01.03.2016
Сообщений: 594
11.09.2018, 17:56  [ТС]
VNIIAEN, Да я на ней остановился. Так регулярка работает быстрее. Просто забыл про лямбда фун-ю и не хотел перегружать методами))
Вместо псюсика там надо умножение поставить. И модификатор m, а не s.

Добавлено через 1 минуту
VNIIAEN, Хотел узнать, есть ли выражение без вызова фун-и. Но даже если и есть, то будет медленне, что не приемлемо))

Добавлено через 31 минуту
VNIIAEN, Начал тестить и оказалось, что ваш и мой вар не работают. Нужно работать с множеством блоков без вложений. При s он захватывает все со
Цитата Сообщение от 53ifbb Посмотреть сообщение
И модификатор m, а не s
s - правильный, чуть запутался со своим вариантом (у меня чуть добавлены условия).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2018, 17:56
Помогаю со студенческими работами здесь

Ищу готовую бд
Ищу любую примитивную бд на тему комплектация пк можно все по минимуму главное чтобы связь была и все. Несколько таблиц по несколько...

Программа для замены символов
program n01; uses crt; var a:array of char; b:array of char; f1:text;i:integer; d:string;c:char; begin ...

Ищу готовую программу БД
Здравствуйте! Уважаемые IT-шники, ищу небольшую программу готовую ну или не готовую, для того что бы работать с нескольких компьютеров...

Функция для замены символов в строке
Есть ли в Access 97 функция для замены символов в строке?

Ищу готовую задачку с таймером
Ждущий таймер. Консольное приложение типа «Будильник» с функциями «Соня». Время срабатывания и период напоминания вводятся в командной...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru