<?php
$data = <<<DATA
[img]img_patch[/img]
[img=200x150]img_patch[/img]
[img width=200 height=150]img_patch[/img]
[img=width=200xheight=150]img_patch[/img]
[img width=200]img_patch[/img]
DATA;
$regex = '~
(?P<tag>\[img[^][]*\])
(?P<src>.+?)
\[/img]
~x';
$inner = '~\b(?P<key>width|height)?=(?P<value>[^\s\]]+)~';
$values = '~\d+~';
function($match) use($inner, $values) {
$attr = [];
foreach($attributes as $attribute) {
if (!empty($attribute["key"])) $attr[$attribute["key"]] = $attribute["value"]; else {
list($attr["width"], $attr["height"]) = array($width_height[0][0], $width_height[0][1]); }
}
// do the actual replacement here
$attr["src"] = $match["src"];
$ret = "<img";
foreach ($attr as $key => $value) $ret .= " $key='$value'";
$ret .= '>';
return $ret;
},
$data);
echo $data;
?>
PD9waHAKCiRkYXRhID0gPDw8REFUQQpbaW1nXWltZ19wYXRjaFsvaW1nXQpbaW1nPTIwMHgxNTBdaW1nX3BhdGNoWy9pbWddCltpbWcgd2lkdGg9MjAwIGhlaWdodD0xNTBdaW1nX3BhdGNoWy9pbWddCltpbWc9d2lkdGg9MjAweGhlaWdodD0xNTBdaW1nX3BhdGNoWy9pbWddCltpbWcgd2lkdGg9MjAwXWltZ19wYXRjaFsvaW1nXQpEQVRBOwoKJHJlZ2V4ID0gJ34KCQkJCQkoP1A8dGFnPlxbaW1nW15dW10qXF0pCgkJCQkJKD9QPHNyYz4uKz8pCgkJCQkJXFsvaW1nXQoJCQkJCX54JzsKCgokaW5uZXIgPSAnflxiKD9QPGtleT53aWR0aHxoZWlnaHQpPz0oP1A8dmFsdWU+W15cc1xdXSspfic7CiR2YWx1ZXMgPSAnflxkK34nOwoKJGRhdGEgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4LAoJZnVuY3Rpb24oJG1hdGNoKSB1c2UoJGlubmVyLCAkdmFsdWVzKSB7CgkJJGF0dHIgPSBbXTsKCQlwcmVnX21hdGNoX2FsbCgkaW5uZXIsICRtYXRjaFsndGFnJ10sICRhdHRyaWJ1dGVzLCBQUkVHX1NFVF9PUkRFUik7CgkJZm9yZWFjaCgkYXR0cmlidXRlcyBhcyAkYXR0cmlidXRlKSB7CgkJCWlmICghZW1wdHkoJGF0dHJpYnV0ZVsia2V5Il0pKSAkYXR0clskYXR0cmlidXRlWyJrZXkiXV0gPSAkYXR0cmlidXRlWyJ2YWx1ZSJdOwoJCQllbHNlIHsKCQkJCXByZWdfbWF0Y2hfYWxsKCR2YWx1ZXMsICRhdHRyaWJ1dGVbInZhbHVlIl0sICR3aWR0aF9oZWlnaHQpOwoJCQkJbGlzdCgkYXR0clsid2lkdGgiXSwgJGF0dHJbImhlaWdodCJdKSA9IGFycmF5KCR3aWR0aF9oZWlnaHRbMF1bMF0sICR3aWR0aF9oZWlnaHRbMF1bMV0pOwoJCQl9CgkJfQoKCQkvLyBkbyB0aGUgYWN0dWFsIHJlcGxhY2VtZW50IGhlcmUKCQkkYXR0clsic3JjIl0gPSAkbWF0Y2hbInNyYyJdOwoJCSRyZXQgPSAiPGltZyI7CgkJZm9yZWFjaCAoJGF0dHIgYXMgJGtleSA9PiAkdmFsdWUpICRyZXQgLj0gIiAka2V5PSckdmFsdWUnIjsKCQkkcmV0IC49ICc+JzsKCgkJcmV0dXJuICRyZXQ7IAoJfSwKCSRkYXRhKTsKCmVjaG8gJGRhdGE7Cj8+