Я хотел бы сделать тег [code] [/ code] для bbcode так, чтобы то, что было бы внутри, не принималось во внимание в php regex что я сделал.Создание кода [code] [/ code] для BBcode с php regex
Пример:
Hello [b]newbie[/b], to write in bold, use the following : [code][b](YOURTEXT)[/b][/code]
Если вернуться в HTML:
Hello <strong>newbie</strong>, to write in bold, use the following : [b](YOURTEXT)[/b]
Вот вид части моей BBcode функции:
<?
function bbcode($var) {
$var = preg_replace('`\[b\](.+)\[/b\]`isU', '<strong>$1</strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em>$1</em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u>$1</u>', $var);
return $var;
}
?>
Спасибо заранее за вашу любезную помощь!
EDIT: Вот как я, наконец, сделал это работает:
<?
function bbcode($var) {
$var2 = preg_split('`(\[code].*?\[/code])`isU', $var, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$var = preg_replace('`\[b\](.+)\[/b\]`isU', '<strong>$1</strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em>$1</em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u>$1</u>', $var);
$var = preg_replace('`(\[code].*?\[/code])`isU', $var2[1], $var);
$var = preg_replace('`\[code\](.+)\[/code\]`isU', '<div>$1</div>', $var);
return $var;
}
$text = 'Hello [b]newbie[/b], to write in bold, use the following [u]lol[/u] : [code][b](YOURTEXT) [u]lol[/u][/b][/code] [b][u]LOL[/u][/b]';
echo bbcode($text);
?>
ОДНАКО, есть новая проблема, которая возникает: если цепочка символов начинается непосредственно с '[код] для пример
[code][b]hello[/b][/code] test
, чем результат будет:
test test
Это потому, что $ var2 [1] теперь приводит к тому, что происходит после [/ code].
Может кто-нибудь, пожалуйста, помогите мне сделать лучшую делимитацию, которая также будет работать для этой второй цепочки символов? Заранее спасибо !
Я не уверен, что вы хотите сделать ... в любом случае, вы используете жадный регулярное выражение ... Вы должны изменить '(. +) 'к ленивому выражению' (. +?) ' –
Что я хочу сделать, так это то, что bbcode (в примере: [b] (YOURTEXT) [/ b]) внутри тега [code] НЕ ДОЛЖЕН преобразован в (YOURTEXT). Проблема в том, что я не знаю, как сделать preg_replace для [code], который не изменит весь bbcode, который находится внутри этого тега :( – Northwinter
Единственная идея, которую я имел, заключалась в том, чтобы в начале функции сделать что-то, что преобразует '[' в ': beg:' и ']' в ': end:', а затем в нижней части функции повторно преобразует его в '[' и ']'. Но проблема еще раз заключается в том, что я не знаю, не знаю как - ТОЛЬКО - примените это к определенной цепочке каркасов между 2 тегами и игнорируя остальную цепочку каркасов. И, вероятно, лучший способ сделать, но я не знаю, как>< – Northwinter