使用 php 正则表达式为 BBcode 制作 [code][/code]
Making a [code][/code] for BBcode with php regex
我想为 bbcode 创建一个 [code][/code] 标签,这样我创建的 php 正则表达式就不会考虑其中的内容。
示例:
Hello [b]newbie[/b], to write in bold, use the following : [code][b](YOURTEXT)[/b][/code]
应该 return 在 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></strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em></em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u></u>', $var);
return $var;
}
?>
提前感谢您的帮助!
编辑:
以下是我最终如何让它发挥作用的:
<?
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></strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em></em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u></u>', $var);
$var = preg_replace('`(\[code].*?\[/code])`isU', $var2[1], $var);
$var = preg_replace('`\[code\](.+)\[/code\]`isU', '<div></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]”开头,例如
[code][b]hello[/b][/code] test
比结果将是:
test test
这是因为 $var2[1] 现在指向 [/code] 之后的内容。
有人可以帮我做一个更好的分隔,它也适用于第二个字符链吗?提前致谢!
最后,我解决了我遇到的所有问题:
<?
function bbcode($var) {
$var2 = getStringBetween($var, '[code]', '[/code]');
$var = preg_replace('`\[b\](.+)\[/b\]`isU', '<strong></strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em></em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u></u>', $var);
$var = preg_replace('`(\[code].+\[/code])`isU', '<div>'.$var2.'</div>', $var);
return $var;
}
function getStringBetween($str,$from,$to)
{
$sub = substr($str, strpos($str,$from)+strlen($from),strlen($str));
return substr($sub,0,strpos($sub,$to));
}
$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);
?>
我想为 bbcode 创建一个 [code][/code] 标签,这样我创建的 php 正则表达式就不会考虑其中的内容。
示例:
Hello [b]newbie[/b], to write in bold, use the following : [code][b](YOURTEXT)[/b][/code]
应该 return 在 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></strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em></em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u></u>', $var);
return $var;
}
?>
提前感谢您的帮助!
编辑: 以下是我最终如何让它发挥作用的:
<?
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></strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em></em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u></u>', $var);
$var = preg_replace('`(\[code].*?\[/code])`isU', $var2[1], $var);
$var = preg_replace('`\[code\](.+)\[/code\]`isU', '<div></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]”开头,例如
[code][b]hello[/b][/code] test
比结果将是:
test test
这是因为 $var2[1] 现在指向 [/code] 之后的内容。
有人可以帮我做一个更好的分隔,它也适用于第二个字符链吗?提前致谢!
最后,我解决了我遇到的所有问题:
<?
function bbcode($var) {
$var2 = getStringBetween($var, '[code]', '[/code]');
$var = preg_replace('`\[b\](.+)\[/b\]`isU', '<strong></strong>', $var);
$var = preg_replace('`\[i\](.+)\[/i\]`isU', '<em></em>', $var);
$var = preg_replace('`\[u\](.+)\[/u\]`isU', '<u></u>', $var);
$var = preg_replace('`(\[code].+\[/code])`isU', '<div>'.$var2.'</div>', $var);
return $var;
}
function getStringBetween($str,$from,$to)
{
$sub = substr($str, strpos($str,$from)+strlen($from),strlen($str));
return substr($sub,0,strpos($sub,$to));
}
$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);
?>