我正在使用regex
解析BBCode,以便将其替换为HTML。由于[code]
标签解析,我现在卡住了。
基本上,当您执行[code][b]this is bb[/b] [u]code in[/u] [i]code[/i][/code]
时,它不应取代[b]
,[u]
,[i]
以及[code]
标记内部的类似标记。< / p>
不幸的是,使用preg_replace:
$this->_text = preg_replace('/\[i](.+?)\[\/i]/i', '<em>\1</em>', $this->_text);
$this->_text = preg_replace('/\[code](.+?)\[\/code]]/i', '<code>\1</code>', $this->_text);
将导致全部替换它们,[code]
标记内的代码将成为HTML格式。
这有什么解决方法吗?我需要点子。在解析其余内容之前,我一直在考虑在[
中转义]
,[code]
括号字符,但这个想法听起来很傻。
答案 0 :(得分:1)
如果你打算从外部解析,你的代码标签需要这样的东西
(?:\[code])(.*)(?=(?:\[\/code]))
但正如其他人所提到的那样,你应该非常小心这一点,因为你不能保证会发生什么事情,它可能是畸形的,然后你最终会得到一堆标签甚至是不完整的混合物已解析和未解析的bbcodes。
如果你有两个[/ code] [/ code],即使我刚写的代码也会失败。