首页 > 解决方案 > 通过正则表达式匹配 BBCode 内容和属性

问题描述

我在一个旧项目中使用 PECL BBCode 类来管理 BBCode,效果很好。对于某些特殊情况,这还不够,因为我需要在输入上运行一个函数。所以我想在 PECL 运行之前用正则表达式来做这件事。

我想匹配 [member]-tag 有和没有属性:

[member]Donald Duck[/member]
[member=Dr. Donald Duck]Donald Duck[/member]

我可以这样匹配它们:

\[member\](.+?)\[\/member\]
\[member=(.+?)\](.+?)\[\/member\]

我怎样才能一步完成?我用 ? 将 = 设为可选?但两者都不匹配。谢谢您的支持。

标签: phpregexbbcode

解决方案


您应该添加=到可选组:

\[member(=.*?)?](.+?)\[\/member]
        ^^^^^^^

查看正则表达式演示

细节

  • \[member- 文字[member子串
  • (=.*?)?- 第 1 组:可选序列,=然后是除换行符之外的任何 0+ 字符,尽可能少
  • ]- 一个]字符(无需转义)
  • (.+?)- 第 2 组:除换行符之外的一个或多个字符,尽可能少
  • \[\/member]- 文字[/member]子串。

推荐阅读