Хорошо, я работал над набором строковых замен для тегов стиля 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, но мне нужна функция, которая может работать с любым количеством тегов-кавычек!
EDIT:
Просто обновление, я решил то, что хотел сделать, изменил код, который дал мне webbiedave, и он работает:
$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]/',
create_function(
'$matches',
'return \'<span class="quote">\'.$matches[1].\' says: \';'
),
$comment);
затем закрывающий тег выбирается с помощью моего обычного тега, который впоследствии заменяет поиск.