如何替换包含结构化内容的自定义bbcode标记



我有一个字符串如下:"[dr]azAZ09-09[/dr]"

示例:[dr]my name here-25[/dr]

我想得到所有的元素:

my name here
-
25

如何编写preg_split()表达式(或其他函数(?

尚不清楚您是需要执行简单的preg_replace()还是preg_replace_callback()(因为您">需要在php代码中执行其他操作"(。

我现在能为您提供的最佳解决方案是使用这种模式,该模式需要[dr]|[/dr]标记和-子字符串分隔符,后跟一个或多个数字。

模式:(演示(

#  ⬐⬐⬐------------⬐⬐⬐⬐--------------- match opening and closing tags
#  ↓↓↓↓↓           ↓↓↓↓↓↓↓ 
~[dr](.+?)-(d+)[/dr]~
#        ↑↑↑   ⬑⬑⬑---------------------- capture one or more digits
#        ⬑⬑----------------------------- capture one or more of any character

使用这两个捕获的子字符串,可以使用preg_replace()生成新的动态替换字符串。

代码:(演示(

$bbcode = '[dr]my name here-25[/dr]';
echo preg_replace('~[dr](.+?)-(d+)[/dr]~', '<div>Reply to: <a href="user.php?id=$2">$1</a></div>', $bbcode);

输出:

<div>Reply to: <a href="user.php?id=25">my name here</a></div>

最新更新