use strict;
my $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
';
my $regex = qr/^\/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}$/mip;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
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 Perl, please visit: http://perldoc.perl.org/perlre.html