Comment puis-je trouver tous Pascalcased mots dans un document avec une expression régulière?
Si vous ne connaissez pas le mot cascal casé, je ne suis concerné que par leader de la chameau supérieure (c.-à-d. Des mots de chameau dans lesquels la première lettre est capitalisé).
cette regex inclut le nombre et les outils Étaillet de chameau inférieur strict tel que défini par le Google Java Validation Regex.
[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
Voici un Snippet illustrant cette regex. Les éléments suivants sont valides.
xmlHttpRequest
newCustomerId
innerStopwatch
supportsIpv6OnIos
youTubeImporter
youtubeImporter
affine3D
Même principe que celui utilisé pour le boîtier de chameau inférieur avec toujours un caractère majuscule de départ.
([A-Z][a-z0-9]+)((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
Voici un extrait illustrant cette regex. Les éléments suivants sont valides.
XmlHttpRequest
NewCustomerId
InnerStopwatch
SupportsIpv6OnIos
YouTubeImporter
YoutubeImporter
Affine3D
Le REGEXP qui a résolu mon problème (nommer correctement des annuaires qui seront reconnus par Fitnessse DBFIT Web Service) sont les suivants:
(^[A-Z][a-z0-9]+[A-Z]$)|(^[A-Z][a-z0-9]+([A-Z][a-z0-9]+)+$)|(^[A-Z][a-z0-9]+([A-Z][a-z0-9]+)+[A-Z]$)
J'envoie d'inverser ces règles de Camelcase, elles sont:
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, e.g. NoChildLeftBehindSuite9102
L'expression a passé mes tests comme suit:
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
Cela semble le faire:
/^[A-Z][a-z]+([A-Z][a-z]+)+/
J'ai inclus Ruby tests unitaires:
require 'test/unit'
REGEX = /^[A-Z][a-z]+([A-Z][a-z]+)+/
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
([A-Z][a-z\d]+)+
Devrait faire l'affaire pour l'étui de chameau supérieur. Vous pouvez également ajouter des soulignements de soulignement de premier plan si vous souhaitez toujours envisager quelque chose comme _InsRunning Haun Camel Case.
([a-z0-9]+|[A-Z0-9]+[a-z0-9]*|[A-Z0-9][a-z0-9]*([A-Z0-9][a-z0-9]*)*)
Java Regex pour faire correspondre la chaîne sur le boîtier de chameau.