powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / обработка данных с помощью preg_replace
8 сообщений из 8, страница 1 из 1
обработка данных с помощью preg_replace
    #39298897
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет. Недавно очень добрые люди помогли мне с preg_replace. Более-менее разобрался, теперь ковыряю. Но вот наткнулся на проблему.
Имеется переменная с исходным кодом страницы, в которой содержится BB-код спойлера. Мне нужно преобразовать эти данные, заменив BB-код спойлера на html. Решил так:

Код: php
1.
2.
$a = '<h1>Hello</h1></br>
"Spoiler" 
Text
<h1>Bye</h1>'; $b = preg_replace('/(.*)\
"([^" 
+)"\]([^\[]+)\[\/spoiler\](.*)/', '\1<details><summary>\2</summary><p>\3</p></details>\4', $a);



Всё работает, но тут появилась проблема. Оказывается, спойлеров может быть несколько. Два, например:

Код: php
1.
$a = '<h1>Hello</h1></br>[spoiler="Spoiler"]Text
<h1>Bye</h1>
"Endspoiler" 
Text
';



И тут мне совсем не понятно как же с помощью preg_replace их оба обработать. Подскажите что-нибудь.
...
Рейтинг: 0 / 0
обработка данных с помощью preg_replace
    #39298906
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдаётся мне, надо инвертировать жадность регекспа. Чтоб не за последнее вхождение "[/spoiler]" цеплялся, а за первое.
Конечно, если правильно угадал проблему.
...
Рейтинг: 0 / 0
обработка данных с помощью preg_replace
    #39298932
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть библиотеки для бб кодов, возьмите готовую. Названий уже не помню.
...
Рейтинг: 0 / 0
обработка данных с помощью preg_replace
    #39298971
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Если даже так, то как с позиционными параметрами (\1 \2 \3) разобраться? Ведь спойлеров может быть и 10.

Чтобы точно меня правильно поняли, мне нужно из первой переменной сделать вторую:

Код: php
1.
2.
3.
$a = '<h1>Hello</h1></br>
"Spoiler" 
Text
<h1>Bye</h1>
"Endspoiler" 
Text
'; $a = '<h1>Hello</h1></br><details><summary>Spoiler</summary><p>Text</p></details><h1>Bye</h1><details><summary>Endspoiler</summary><p>Text</p></details>';





Hett,

Хочется решить эту задачу более чистым способом, не подключая какие-то там библиотеки.
...
Рейтинг: 0 / 0
обработка данных с помощью preg_replace
    #39299045
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покопался и решил задачу вот как:

Код: php
1.
2.
$a = '<h1>Hello</h1></br>
"Spoiler" 
Text
<h1>Bye</h1>
"Endspoiler" 
Text
'; $b = preg_filter('/(\[spoiler="([^"]+)"\])([^\[]+)(\[\/spoiler\])/', '<details><summary>$2</summary><p>$3</p></details>', $a);



Всё работает :)
...
Рейтинг: 0 / 0
обработка данных с помощью preg_replace
    #39299279
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант попроще
Код: php
1.
$b = str_replace('[/spoiler]', '</p></details>', preg_replace('/\[spoiler="([^"]+)"\]/', '<details><summary>\1</summary><p>', $a));
...
Рейтинг: 0 / 0
обработка данных с помощью preg_replace
    #39303386
andrey10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, а для меня мой вариант кажется нагляднее и проще. У меня обрабатывается всё одной функцией и позиционные параметры подставляются в цельный шаблон. Кому как :)
...
Рейтинг: 0 / 0
обработка данных с помощью preg_replace
    #39303431
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey10,

Просто разные подходы к решению задачи. Не в сторону наглядности глядел я, а в сторону упрощения преобразований.
Если есть желание и время, попробуйте протестировать и сравнить производительность и использование памяти того и другого варианта на большом исходном тексте при большом количестве вхождений спойлера (десятки тысяч, чтоб разница была заметна). Ваш вариант использует одну функцию, но длинную регулярку. В моём варианте регулярка проще, но вызываются две функции (впрочем, str_replace() считается "лёгкой" по мнению разработчиков PHP).
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / обработка данных с помощью preg_replace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]