Php 使用正则表达式将img bbcode替换为可选的宽度和高度?

Php 使用正则表达式将img bbcode替换为可选的宽度和高度?,php,regex,bbcode,Php,Regex,Bbcode,我真的没有找到正确的解决办法 我的标准img更换代码是: preg_replace('~\[img](.*?)\[/img\]~s','<img src="$1" />',$text); preg\u replace(“~\[img](.*?\[/img\]]s',”$text); 这当然有效。但是如果设置了宽度和高度,我会尝试替换bbcode但这是可选的,因此如果只设置了一个维度或没有设置维度,它也应该工作。 bbcode看起来像:[img=12x12]图像的链接[/img]

我真的没有找到正确的解决办法

我的标准img更换代码是:

preg_replace('~\[img](.*?)\[/img\]~s','<img src="$1" />',$text);
preg\u replace(“~\[img](.*?\[/img\]]s',”$text);
这当然有效。但是如果设置了宽度和高度,我会尝试替换bbcode但这是可选的,因此如果只设置了一个维度或没有设置维度,它也应该工作。

bbcode看起来像:[img=12x12]图像的链接[/img]

因此,bbcode应该如下所示:

 preg_replace('~\[img=(.*?)x(.*?)\](.*?)\[/img\]~s','<img width="$1" height="$2" src="$3" />',$text);
preg\u replace('~\[img=(.*?)x(.*?\])(.*?\[/img\]~s','','',$text);
我想我弄错了。任何人都知道如何解决这个问题?

试试这个正则表达式:

preg_replace('~\[img=?(\d+)?x?(\d+)?\](.*?)\[/img\]~s','<img width="$1" height="$2" src="$3" />',$text);
preg\u replace('~\[img=?(\d+)?x?(\d+)?\](.*?\[/img\]~s',''.$text);

按照您的编码方式,它无法匹配您想要的所有3种情况:
[img]
[img=NN]
[img=NNxNN]
。只有在两个维度都提供的情况下,它才会匹配。

您的regexp肯定可以工作。我会使用
\d+
,但这样可以确保值存在并且是数字类型:

~\[img=(\d+)x(\d+)\](.*?)\[/img\]~s

您的代码出现了什么错误,或者更确切地说,您希望匹配的字符串是什么,但您没有匹配?

@user3904923这有帮助吗?或者您需要更多帮助吗?实际上是这样。谢谢你的帮助。我没有说这是错误的,只是它没有按照它应该做的去做。但另一个正则表达式似乎有效。:)