re = /^[A-Z](([A-Z]{1,2}[a-z0-9]+)+([A-Z]{1,3}[a-z0-9]+)*[A-Z]{0,3}|([a-z0-9]+[A-Z]{0,3})*|[A-Z]{1,2})$/m
str = 'ABCD
ABCDE
snake_case
camelCase
2PascalCase
streamIOIO
gREATERDtha
MdeADFAFdsADFads
DeviceSNSD
AabcABCD
AabcABCDabcABCD
ABabcABCD
ABabcABCDabcABCD
ABCabcABCD
ABCabcABCDabcABCDabcABCDabcABCD
ABCDabcABCD
ABCDabcABCDabcABCDabcABCDabcABCD
HTMLParser
ContextHTMLParser
ABabcABCDbcABC
ABCDabcABC
ABCDabcAB
ABCDabcA
CamelCa_1
HELLO
AaABC
PacalCasePacalCasePacalCasePacalCasePacalCasePacalCase
AabcABCabcABC
MoeADFdsADFads
ABCabcABC
ABCabcAB
ABabcABC
ABabcAB
AabcAB
ABCabcABCabcA
ABCabcA
Aabc123
AabcABC
A
AB
ABC
StreamIO
IOStream
DeviceID
DeviceSNS
Context
PascalCase
Pascal2Case
PascalCaseA
Pascal2CaseA
ModeA
Mode2A
Mode2A2
Mode2A2A
CreateAMode
CreateBMode
MadeEasy
WonderFul
AndMe
HtmlParser
H
AaA
Camel01C
Camel01c01
Camel01C01
Camel01CC01
Camel0a1c1
Camel0a1C1
Camel0ac1b1C1
CamelC
CamelC1
CamelCA
CamelCa1
IbsReleaseTestVerificationRegressionSuite
IbsReleaseTestVerificationRegressioNSuite
IbsReleaseTestVerificationRegressioN
XmlHttpRequest
NewCustomerId
InnerStopwatch
SupportsIpv6OnIos
YouTubeImporter
YoutubeImporter
Affine3D'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
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 Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html