2009-09-23 2 views
1

Я пишу несколько PHP для преобразования BBcode в HTML.Удаление первой новой строки preg_replace

Я хотел бы преобразовать эту BBcode:

[quote] 
Hello World 
[/quote] 

к следующему:

<blockquote>Hello World</blockquote> 

Функция preg_replace, что я использую, чтобы выполнить это:

preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode); 

Это почти все, что мне нужно, но моя проблема в том, что она переносится через \ n из до и после «Hello World» и производит:

<blockquote> 
Hello World 
</blockquote> 

Любые идеи, как я мог это исправить? Вся помощь очень ценится.

ответ

1

Попробуйте это регулярное выражение:

/\[quote\]\s*(.+?)\s*\[\/quote\]/s 
+0

Это работает! :) Я был уверен, что уже пробовал что-то подобное, но, очевидно, нет. Большое спасибо Gumbo – Joey

0

Вам нужно избегать обратной косой черты внутри двойных кавычек. Вместо "\ [" вам нужно "\\ [".

0

Возможность будет использовать «e» regex-modifier, чтобы позвонить, например, функцию 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, на manual page of preg_replace)
(Это может быть немного излишним в этом случае, я должен добавить - но это приятно знать, что в любом случае)

+0

Также действительное предложение, и оно тоже работает. Спасибо Pascal – Joey

+0

Добро пожаловать :-) Удачи! –

Смежные вопросы