Удаление первой новой строки 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)
(Может быть, это немного излишне, в этом случае, я должен добавить - но все равно приятно знать)

Другие вопросы по тегам