我正在为我的网站制作一些 BBcode。
我已经设法让大部分代码完美地工作,但是 [QUOTE] 标签让我有些伤心。
当我得到这样的东西时:
[QUOTE=1]
[QUOTE=2]
This is a quote from someone else
[/QUOTE]
This is someone else quoting someone else
[/QUOTE]
它将返回:
> 1 said: [QUOTE=2]This is a quote from
> someone else
This is someone else quoting someone else[/QUOTE]
所以发生的事情是嵌套引用中的 [/quote] 正在关闭引用 block 。
我使用的正则表达式是:
"[quote=(.*?)\](.*?)\[/quote\]'is"
我怎样才能使嵌套引号正确显示?
谢谢。
最佳答案
你可以构造递归正则表达式(根据他们的更新日志,自 libpcre-3.0 开始可用):
\[quote=(.*?)\](((?R)|.)*?)\[\/quote\]
但如果您遵循@codeka 的建议会更好。
更新:
(?R)
这里的意思是«将整个正则表达式插入到(?R)
的位置发生»。所以a(?R)?b
等同于(如果您忘记捕获组) a(a(?-1)?b)?b
相当于a(a(a(?-1)?b)?b)?b
等等。而不是 (?R)
你可以使用 (?N)
, (?+N)
, (?-N)
和 (?&a)
这意味着«用第 N 个捕获组替换»、«用第 N 个下一个捕获组替换»、«用第 N 个前一个捕获组替换» 和 «用名为 «a» 的捕获组替换。
关于php - 正则表达式和 BBCode - 完善嵌套报价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2909588/