php - 通过正则表达式匹配 BBCode 内容和属性
问题描述
我在一个旧项目中使用 PECL BBCode 类来管理 BBCode,效果很好。对于某些特殊情况,这还不够,因为我需要在输入上运行一个函数。所以我想在 PECL 运行之前用正则表达式来做这件事。
我想匹配 [member]-tag 有和没有属性:
[member]Donald Duck[/member]
[member=Dr. Donald Duck]Donald Duck[/member]
我可以这样匹配它们:
\[member\](.+?)\[\/member\]
\[member=(.+?)\](.+?)\[\/member\]
我怎样才能一步完成?我用 ? 将 = 设为可选?但两者都不匹配。谢谢您的支持。
解决方案
您应该添加=
到可选组:
\[member(=.*?)?](.+?)\[\/member]
^^^^^^^
查看正则表达式演示
细节
\[member
- 文字[member
子串(=.*?)?
- 第 1 组:可选序列,=
然后是除换行符之外的任何 0+ 字符,尽可能少]
- 一个]
字符(无需转义)(.+?)
- 第 2 组:除换行符之外的一个或多个字符,尽可能少\[\/member]
- 文字[/member]
子串。
推荐阅读
- r - r中每隔两行具有不同值的条件列计算
- css - Webpack 在某些土耳其字符后插入不需要的空格
- actions-on-google - 处理启用显示设备谷歌操作的重新提示
- php - 在数组中搜索一些对象数据
- solr - Solr 错误:在请求处理程序中使用不变量时 QueryComponent.mergeIds(QueryComponent.java:940)
- angular - 来自第三方声明模块的打字稿导入功能
- android - 如果应用程序关闭,如何获取 Firebase 推送消息 FCM
- android - Ionic - 使用电容器的安卓模拟器出现 Http 错误?
- php - date_diff() 期望参数 2 是 DateTimeInterface,在第 234 行给出布尔值
- firebase - Firebase 实时数据库、ListAdapter、DiffUtil 和 ViewModel