$re = '/<img\s+
(?=[^>]*\balt="(?<alt>[^>]*?)")? # optional alt attribute
(?=[^>]*\bclass="(?<class>[^>]*?)")? # optional class attribute
(?=[^>]*\bsrc="(?<src>[^>]*?)") # src attribute
[^>]*\/>/x';
$str = '<img src="image.png" alt="test" style="zoom:55%;" />
<img class="big" src="image2.png" />
<img alt="test" src="image.png" style="zoom:55%;" />
<img src="image.png" class="small" style="zoom:55%;" alt="test" />
<img src="image.png" alt="test" style="zoom:55%;" />
<img src="image.png"
alt="test"
style="zoom:55%;" />';
$subst = "![${alt}](${src}){.${class}}";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php