Хорошо, я работал с набором замен строк для тегов стиля bbcode на моем форуме, замена [b]
и [i]
и т. д. довольно проста, поскольку я могу заменить их напрямую без проблем.
Есть два тега, которые доставляют мне проблемы, так как то, что мне нужно с ними делать, более сложное. [quote]
и [url]
— это хорошо, но я хотел бы предоставить пользователям выбор между [quote=person_to_quote]
и [url=URL]link text[/url]
, тэг [quote=]
тоже должен быть вложенным!
Поэтому мне нужно иметь возможность заменить открывающий тег [quote=
, затем сохранить строку, добавить ]
, показать цитату, а затем закончить [/quote]
. Я могу полностью заменить теги и сохранить штраф =person
, но это делается с помощью обмана и простого добавления конечного тега к тексту. Что я действительно хотел бы сделать, так это вытащить все, что находится между =
и ]
, чтобы я мог манипулировать им по отдельности.
В настоящее время я использую массив и просто заменяю встроенный текст следующим образом:
"[quote=" is replaced by "<span class=\"quote\">[Quote: ",
и просто отбрасывать незамещенный текст обратно в конец, хотя это некрасиво. Что я хотел бы сделать, так это взять код, говорящий [quote=person]some text here[/quote]
, и превратить его в:
"[quote=" is replaced by "<span class=\"quote\">$person says: ",
где $person будет переменной, в которой хранится имя человека, чтобы его можно было заменить динамически.
Аналогично с URL-адресами, которые я хотел бы заменить [url=link]link text[/url]
и сделать так, чтобы он мог принимать URL-адрес и заменять его встроенным, поэтому вывод:
"[url=" is replaced by "<a href=$URL>"
с уже закрытым тегом html, что означает удаление URL-адреса, его сохранение и последующая замена.
Итак, какой метод я использую для удаления текста между =
и закрывающими тегами ]
, чтобы то, что я передаю в массив замены, могло быть передано и изменено соответствующим образом. Кроме того, я не беспокоюсь о вложенности в quotes
, поскольку стиль класса span позаботится об этом, но мне нужна функция, которая может работать с любым количеством тегов кавычек! Пожалуйста, подумайте.
РЕДАКТИРОВАТЬ:
Просто обновление, я решил то, что хотел сделать, я изменил код, который дал мне webbiedave, и он работает:
$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]/',
create_function(
'$matches',
'return \'<span class="quote">\'.$matches[1].\' says: \';'
),
$comment);
тогда закрывающий тег в любом случае подбирается через мой обычный поиск по тегу.