0

我有一个像这样的字符串:

juices vegetables including {{smartpro=img:hippo-1.jpg,alt:abc,ht:217,wd:247,align:left}} wheatgrass, leafy greens, parsley, aloe vera & other herbs


现在这里{{smartpro=img:hippo-1.jpg,alt:abc,ht:217,wd:247,align:left}}
替换为
<img src="www.abc.com/media/images/hippo-1.jpg" alt="" width="247" height="217" align="left">
所以最终的字符串将是:

juices vegetables including <img src="www.abc.com/media/images/hippo-1.jpg" alt="abc" width="247" height="217" align="left"> wheatgrass, leafy greens, parsley, aloe vera & other herbs

请帮忙 。
我的尝试:preg_replace('~\{{\{{(.+)\:(.+)\}}\}}~iUs','<img src="$2">$1/>',$string);

4

2 回答 2

1
$string = 'juices vegetables including {{smartpro=img:hippo-1.jpg,alt:Hippocrates,ht:217,wd:247,align:left}} wheatgrass, leafy greens, parsley, aloe vera & other herbs';
$pattern = '/(?:{{smartpro=img:)([^,]+)(?:,alt:)([^,]+)(?:,ht:)([^,]+)(?:,wd:)([^,]+)(?:,align:)([^}]+)(?:}})/i';
$replacement = '<img src="$1" alt="$2" height="$3px" width="$4px" align="$5"/>';
echo preg_replace($pattern, $replacement, $string);
于 2013-09-12T10:17:21.487 回答
1

我不确定你为什么\{{\{{在你的正则表达式中。{{{{你的字符串里可能有吗?

此外,(.+):将匹配所有内容,直到最后一个:,因为.+它是贪婪的。

如果您的字符串始终处于相同的顺序,我建议使用这个:

{{[^}]*?(?:,?img:([^,}]+))?(?:,?alt:([^,}]+),)?(?:,?ht:(\d+))?(?:,?wd:(\d+))?(?:,?align:(\w+))?}}

并替换为:

<img src="www.abc.com/media/images/$1" alt="$2" width="$3" height="$4" align="$5">

如果缺少一个或多个参数,此正则表达式也将起作用。

正则表达式101演示

于 2013-09-12T10:33:07.703 回答