php - 正则表达式和 BBCode - 完善嵌套报价

标签 php regex bbcode

我正在为我的网站制作一些 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/

相关文章:

python - 如何使用 Python 和正则表达式将一组字母替换为符号

php - 专门将YouTube网址转换为iframe代码,同时将BBCode网址转换为html元素

php - 如何在 Drupal 8 上更新自定义用户字段

php - CSS Sprites - 如何隐藏图像的平衡部分

c# - 使用正则表达式替换坏词

c++ - 在 C++ 中使用正则表达式查找 [/和 ] 之间的数字

html - PHPBB 最佳 YouTube BBCode

将 bbcode 转换为 javadoc 的 Java IDE 插件或外部工具(ant、maven、独立)?

php - PHP字符串替换无法正常工作

php - 将空格更改为 -