¿Por qué ocurre este error?Ruby Regexp Interpolation/Character Class/Global Variable Syntax Clash?
Regexp.new("[#$]")
# => SyntaxError: (irb):1: syntax error, unexpected $undefined
# => Regexp.new("[#$]")
# ^
# (irb):1: unterminated string meets end of file
# from ~/.rvm/rubies/ruby-1.9.3-p194/bin/irb:1:in `<main>'
Esto debería describir el subconjunto de cadenas que consta de un único $
o #
, literalmente. Y, AFAIU Ruby's Regexp engine, #
y $
don't need to be escaped dentro de una clase de caracteres a pesar de que generalmente son metacaracteres.
Supongo por el mensaje de error que Ruby está tratando de interpolar $
cuando está golpeando #
entre comillas dobles, pero ... ¿por qué? Ordenar es importante Los caracteres $
y #
tienen múltiples comportamientos sobrecargados, por lo que no sé qué es lo que lo desencadena.
PS, FYI:
/[#$]/
# => SyntaxError: (irb):1: syntax error, unexpected $undefined
/[$#]/
# => /[$#]/
Regexp.new '[$#]'
# => /[$#]/
Regexp.new '[#$]'
# => /[#$]/
Regexp.new "[#$]"
# => SyntaxError: (irb):1: syntax error, unexpected $undefined
posible duplicado de [Desconcertado por un simple expresión regular] (http://stackoverflow.com/questions/9493100/stumped-by-a-simple-regex) –
http://books.google.ca/books?id=jcUbTcr5XWwC&pg=PA48&lpg=PA48&dq=ruby+global+variable+interpolation&source=bl&ots=fIDnyi9zjG&sig=BqcdRjtCnj3pj-PCtcMYh7UHS18&hl=en&sa=X&ei=Ci29T8IJgZOJArLYzewN&ved=0CFoQ6AEwAw#v=onepage&q=ruby % 20global% 20variable% 20interpolación & f = falso –
@muistooshort: sí, tiene razón: ambas preguntas tienen la misma respuesta. – pje