Удаление первой новой строки preg_replace
Я пишу немного PHP для преобразования BBcode в HTML.
Я хотел бы конвертировать этот BBcode:
[quote]
Hello World
[/quote]
к следующему:
<blockquote>Hello World</blockquote>
Функция preg_replace, которую я использую для этого:
preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);
Это почти все, что мне нужно, но моя проблема в том, что он выполняет \ n's до и после "Hello World" и производит:
<blockquote>
Hello World
</blockquote>
Есть идеи, как я мог это исправить? Вся помощь очень ценится.
3 ответа
Попробуйте это регулярное выражение:
/\[quote\]\s*(.+?)\s*\[\/quote\]/s
Вы должны избежать обратной косой черты внутри двойных кавычек. Вместо "\[" вам нужно "\\[".
Возможность будет использоватьe
' regex-модификатор, для вызова, например, trim
функция на строку.
Цитирую эту страницу руководства:
е (
PREG_REPLACE_EVAL
)
Если этот модификатор установлен,preg_replace()
выполняет обычную замену обратных ссылок в строке замены, оценивает ее как код PHP и использует результат для замены строки поиска. Одинарные кавычки, двойные кавычки, обратная косая черта (\
) а такжеNULL
символы будут экранированы обратными слешами в замещенных обратных ссылках.Только
preg_replace()
использует этот модификатор; он игнорируется другими функциями PCRE.
Например, этот код лишь немного отличается от вашего:
$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;
$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);
Даст вам:
string '<blockquote>Hello World</blockquote>' (length=36)
то есть trim
функция вызывается для того, что было найдено - обратите внимание, что она удалит все пробелы в начале и конце вашей строки; не только переводы строк, но и пробелы и табуляции.
(Например, вы можете взглянуть на Пример № 4 на странице руководстваpreg_replace
)
(Может быть, это немного излишне, в этом случае, я должен добавить - но все равно приятно знать)