【问题标题】:Syntax error in Ruby regexp containing @包含 @ 的 Ruby 正则表达式中的语法错误
【发布时间】:2017-06-19 06:37:49
【问题描述】:

我正在尝试用*/**:* 分别替换字符串中出现的特殊字符,如/: 等。

str.gsub!(/([;.\\/?:@&=+$,{}|^\[\]`<>#%"'])/, '*\1*')

但是,我收到了SyntaxError

`@&' is not allowed as an instance variable name
syntax error, unexpected end-of-input, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
str.gsub!(/([;.\\/?:@&=+$,{}|^\[\]`<>#%"'])/, '*...
                     ^ (SyntaxError)

我尝试将该正则表达式定义为字符串并使用RegExp.quote(...) 对其进行转换,但无济于事。任何建议将不胜感激!

【问题讨论】:

  • 您只是忘记转义正则表达式中的/ 符号:str.gsub!(/([;.\\\/?:@&amp;=+$,{}|^\[\]`&lt;&gt;#%"'])/, '*\1*')。在您的情况下,RoR 期望在 @ 之后有一个有效的变量名。

标签: ruby regex ruby-on-rails-4


【解决方案1】:

您只是忘记在正则表达式中转义 / 符号:

str.gsub!(/([;.\\\/?:@&=+$,{}|^\[\]`<>#%"'])/, '*\1*')
                 ^

否则,@ 后面应该是一个有效的变量名。

【讨论】:

  • 我建议对字符集中的转义反斜杠和转义斜杠重新排序,以便于阅读和理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多