use strict;
my $str = 'snake_case
PascalCase
2PascalCase
streamIOIO
gREATERDtha
modeADFAFdsADFads
aBabcABCDabcABC
modeADFdsADFads
streamIO
aBCabcABCabcA
aBCabcA
aabcABC
deviceSNS
pathASNs
dscpCP
awsVPC
deviceID
gREA1
gREAt
gREAtREAt
aABC
modeADFsADFads
modeADFads
createAMode
createBMode
contextHTMLParser
ibsReleaseTestVerificationRegressioNSuite
hELLO
camelCA
camel01CC01
camelCa_1
aabc123
a
ab
abc
abcd
abcde
camelCasecamelCasecamelCasecamelCasecamelCasecamelCase
aG
alphabet
cP3
a1
a1G
a123
camelCase
lThan30DaysCount
lessThan30DaysCount
lessThan30DaysCountA
greaterThan30LessThan60DaysCount
greaterThan60LessThan90DaysCount
greaterThan90DaysCount
pascalCase
pascal2Case
pascalCaseA
pascal2CaseA
modeA
mode2A
mode2A2
mode2A2A
madeEasy
wonderFul
andMe
htmlParser
h
aaA
camel01C
camel01c01
camel01C01
camel0a1c1
camel0a1C1
camel0ac1b1C1
camelC
camelC1
camelCa1
ibsReleaseTestVerificationRegressionSuite
ibsReleaseTestVerificationRegressioN
xmlHttpRequest
newCustomerId
innerStopwatch
supportsIpv6OnIos
youTubeImporter
youtubeImporter
affine3D';
my $regex = qr/^[a-z][a-z0-9]*(([A-Z][a-z0-9]+)*[A-Z]?|([a-z0-9]+[A-Z])*|[A-Z])$/mp;
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