use strict;
my $str = '\\u001b7 \\u001b8 \\u001bH \\u001b>
\\u001b[K \\u001b[0K \\u001b[J \\u001b[2J
\\u001b[10A \\u001b[10B \\u001b[10C \\u001b[10D \\u001b[10E \\u001b[10F
\\u001b[10S \\u001b[10T \\u001b[10G \\u001b[8C \\u001b[s \\u001b[u \\u001b[1000D22
\\u001b[999;999H \\u001b[1;1H \\u001b[1;1f \\u001b[1;24r
\\u001b[6n \\u001b[5i \\u001b[4i \\u001b[3g
\\u001b[?7h \\u001b[?25h \\u001b[?25l
\\u001b[0m
\\u001b[31m \\u001b[41m
\\u001b[1m \\u001b[4m \\u001b[5m \\u001b[7m \\u001b[8m
\\u001b[31;1m \\u001b[41;1m
\\u001b[38;5;255m \\u001b[48;5;255m';
my $regex = qr/(\\u001b)(8|7|H|>|\[(\?\d+(h|l)|[0-2]?(K|J)|\d*(A|B|C|D\D|E|F|G|g|i|m|n|S|s|T|u)|1000D\d+|\d*;\d*(f|H|r|m)|\d+;\d+;\d+m))/p;
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