5 Stimmen

Regex, der auf gültige lokale Ruby-Variablennamen passt

Kennt jemand die Regeln für gültige Ruby-Variablennamen? Kann man sie mit einem RegEx abgleichen?

UPDATE: Das ist alles, was mir bisher eingefallen ist:

^[_a-z][a-zA-Z0-9_]+$

Ist das richtig?

1voto

schpet Punkte 7938

Ich habe versucht, eine Lösung für ein Rails-Patch zu finden, und Matthew Draper schrieb dies unter Verwendung der Rubin-Parser als Referenz:

/\A(?![A-Z0-9])(?:[[:alnum:]_]|[^\0-\177])+\z/

0voto

Jörg W Mittag Punkte 349574

Und hier ist sie, direkt aus dem Mund des Pferdes. (Das Pferd ist in diesem Fall die Entwurf der ISO-Ruby-Spezifikation ):

  • lokale-variable-identifier( Kleinbuchstaben | _ ) Bezeichner-Zeichen *
  • Bezeichner-ZeichenKleinbuchstaben | Großbuchstaben | Dezimalziffer | _
  • GroßbuchstabenA | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
  • Kleinbuchstabena | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
  • Dezimalziffer0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

In Ruby 1.9 können Sie dies mit benannten Gruppen wörtlich übersetzen:

local_variable_identifier = %r{ 
  (?<uppercase_character>     A | B | C | D | E | F | G | H | I | J | K | L | M
                            | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
  ){0} 
  (?<lowercase_character>     a | b | c | d | e | f | g | h | i | j | k | l | m
                            | n | o | p | q | r | s | t | u | v | w | x | y | z
  ){0} 
  (?<decimal_digit>         0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9){0} 
  (?<identifier_character>    \g<lowercase_character>
                            | \g<uppercase_character>
                            | \g<decimal_digit>
                            | _
  ){0} 

  ( \g<lowercase_character> | _ ) \g<identifier_character>*
}x

Natürlich ist das nicht die Art und Weise, wie Sie es wirklich schreiben würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X