$re = '/^\/prifix\/([a-zA-Z0-9_\-\!\.\/]+)\/{0,1}((\/(full|square|([1-9]\d*|0),([1-9]\d*|0),([1-9]\d*),([1-9]\d*)|pct:(([1-9]\d*|0)(\.\d+)?),(([1-9]\d*|0)(\.\d+)?),([1-9]\d{0,1}(\.\d*)?|0\.[0]*[1-9]+|100(\.0+)?),([1-9]\d{0,1}(\.\d*)?|0\.[0]*[1-9]+|100(\.0+)?)|(\w+))\/(full|max|([1-9]\d*),|,([1-9]\d*)|(\!)?([1-9]\d*),([1-9]\d*)|pct:(([1-9]\d*)(\.\d+)?)|(\w+))\/(\!)?([1-9]\d*|0|(\w+))(\.\d+)?\/(default|color|gray|bitonal|(\w+))\.(jpg|tif|png|webp|pdf|jp2|(\w+)))|info\.json){0,1}$/miU';
$str = '/prifix/imageID/1024,1024,1024,1024/1024,1024/0/default.jpg
/prifix/imageID/1024,1024,1024,1024/!1024,1024/0/default.jpg
/prifix/imageID/1024,1024,1024,1024/1024,/0/default.jpg
/prifix/imageID/1024,1024,1024,1024/,1024/0/default.jpg
/prifix/imageID/full/PCT:50/0/default.jpg
/prifix/imageID/SqUarE/1024,/0/deFAult.jPg
/prifix/imageID/SqUarE/,1024/0/deFAult.jPg
/prifix/imageID/SqUarE/1024,2048/0/deFAult.jPg
/prifix/imageID/SqUarE/full/0/deFAult.jPg
/prifix/imageID/inFo.json
/prifix/imageID/
/prifix/imageID
/prifix/errorFormate/aaa/bbb/ccc/ddd.jpg
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
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