Espressione regolare per identificare le parole CamelCasiled con la lettera maiuscola iniziale

Come trovo tutte le parole CamelCased in un documento con un’espressione regolare? Mi preoccupo solo di portare il caso di cammello superiore (cioè parole in cammello in cui la prima lettera è maiuscola).

([AZ][a-z0-9]+)+ 

Supponendo che l’inglese. Utilizzare classi di caratteri appropriate se lo si desidera internazionalizzabile. Questo corrisponderà a parole come “Questo”. Se vuoi abbinare solo parole con almeno due maiuscole, basta usare

 ([AZ][a-z0-9]+){2,} 

AGGIORNAMENTO: Come ho detto in un commento, una versione migliore è:

 [AZ]([A-Z0-9]*[az][a-z0-9]*[AZ]|[a-z0-9]*[AZ][A-Z0-9]*[az])[A-Za-z0-9]* 

Corrisponde a stringhe che iniziano con una lettera maiuscola, contengono solo lettere e numeri e contengono almeno una lettera minuscola e almeno un’altra lettera maiuscola.

Il regexp che ha risolto il mio problema (denominando correttamente le directory che saranno riconosciute dal servizio web FitNesse DbFit) è:

 (^[AZ][a-z0-9]+[AZ]$)|(^[AZ][a-z0-9]+([AZ][a-z0-9]+)+$)|(^[AZ][a-z0-9]+([AZ][a-z0-9]+)+[AZ]$) 

Ho decodificato queste particolari regole di CamelCase, sono:

 1. First character uppercase alpha 2. Next 1-n characters lowercase alphanumeric 3. Next character (n+1) uppercase alpha 4. Next 0 or more characters lowercase alphanumeric No consecutive uppercase; no special characters. Pattern may be repeated, eg NoChildLeftBehindSuite9102 

L’espressione ha superato il mio test come segue:

 Camel01C is CamelCase syntax Camel01c01 is not CamelCase syntax Camel01C01 is CamelCase syntax Camel01CC01 is not CamelCase syntax Camel0a1c1 is not CamelCase syntax Camel0a1C1 is CamelCase syntax Camel0ac1b1C1 is CamelCase syntax CamelC is CamelCase syntax CamelC1 is CamelCase syntax CamelCA is not CamelCase syntax CamelCa1 is CamelCase syntax CamelCa_1 is not CamelCase syntax IbsReleaseTestVerificationRegressionSuite is CamelCase syntax IbsReleaseTestVerificationRegressioNSuite is not CamelCase syntax IbsReleaseTestVerificationRegressioN is CamelCase syntax 

Cassa del cammello inferiore

questa espressione regolare include il numero e implementa un caso di cammello inferiore e rigoroso come definito dalla convalida delle espressioni regolari di Google Java Style Guide .

 [az]+((\d)|([A-Z0-9][a-z0-9]+))*([AZ])? 
  1. Il primo carattere è in minuscolo.
  2. I seguenti elementi sono un numero singolo o un carattere maiuscolo seguito da caratteri minuscoli.
  3. L’ultimo carattere può essere in maiuscolo.

Ecco un frammento che illustra questa regex. I seguenti elementi sono validi.

 xmlHttpRequest newCustomerId innerStopwatch supportsIpv6OnIos youTubeImporter youtubeImporter affine3D 

Cassa superiore del cammello

Lo stesso principio usato per il caso di cammello inferiore con sempre un carattere maiuscolo iniziale.

 ((\d)|([A-Z0-9][a-z0-9]+))*([AZ])? 

Ecco un frammento che illustra questa regex. I seguenti elementi sono validi.

 XmlHttpRequest NewCustomerId InnerStopwatch SupportsIpv6OnIos YouTubeImporter YoutubeImporter Affine3D 

La regex di Adam Crume è chiusa, ma non corrisponderà ad esempio a IFoo o HTTPConnection . Non sono sicuro degli altri, ma prova questo:

 \b[AZ][az]*([AZ][az]*)*\b 

Le stesse avvertenze per la risposta di Adam relativa a cifre, I18N, caratteri di sottolineatura ecc.

Puoi testarlo qui .

Questo sembra farlo:

 /^[AZ][az]+([AZ][az]+)+/ 

Ho incluso i test delle unità di Ruby:

 require 'test/unit' REGEX = /^[AZ][az]+([AZ][az]+)+/ class RegExpTest < Test::Unit::TestCase # more readable helper def self.test(name, &block) define_method("test #{name}", &block) end test "matches camelcased word" do assert 'FooBar'.match(REGEX) end test "does not match words starting with lower case" do assert ! 'fooBar'.match(REGEX) end test "does not match words without camel hump" do assert ! 'Foobar'.match(REGEX) end test "matches multiple humps" do assert 'FooBarFizzBuzz'.match(REGEX) end end 

Ho appena modificato una delle proposte di @ AdamCrume:

 ([AZ]+[a-z0-9]+)+ 

Questo corrisponderà a IFrame , ma non a ABC . Altre parole con cammello sono abbinate, ad esempio AbcDoesWork e, soprattutto, corrispondono anche a parole semplici che non hanno almeno un’altra lettera in maiuscolo , ad esempio Frame .

Cosa ne pensi di questa versione? Mi sto perdendo un caso importante?

 ([AZ][az\d]+)+ 

Dovrebbe fare il trucco per la custodia del cammello superiore. Puoi aggiungere anche caratteri di sottolineatura principali se vuoi ancora prendere in considerazione qualcosa come _IsRunning caso di cammello superiore.

 ([a-z0-9]+|[A-Z0-9]+[a-z0-9]*|[A-Z0-9][a-z0-9]*([A-Z0-9][a-z0-9]*)*)