web-dev-qa-db-fra.com

Regex pour des mots pascalaisés (aka camélinée avec une lettre majuscule principale)

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é).

35
Tom Lehman

Étui de chameau inférieur

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])?
  1. Le premier caractère est minuscule.
  2. Les éléments suivants sont soit un nombre unique, soit un caractère majuscule suivi des caractères de cas inférieurs.
  3. Le dernier caractère peut être une majuscule.

Voici un Snippet illustrant cette regex. Les éléments suivants sont valides.

xmlHttpRequest
newCustomerId
innerStopwatch
supportsIpv6OnIos
youTubeImporter
youtubeImporter
affine3D

Étui de chameau supérieur

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
6
Nicolas Henneaux

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
6
Billy Baroo

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
2
nakajima
([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.

1
ahawker
([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.

0
Mahesh Yadav