ruby符号(语法)包含什么?

我想创建正则表达式来匹配ruby符号,但我需要知道符号的确切语法是什么。

到现在为止,我知道以下内容:

:'string' :"string" :__underline :method :exclamation! :question? :@instance :$global 

你所谈论的并不完全清楚。

如果你在谈论一个Symbol可以包含什么,答案是:任何东西,包括换行符,任意空格,控制字符,任意奇怪和模糊的Unicode字符,以及其他一切。

如果您正在谈论编写Symbol文字的各种方法,这是我最好的理解:

  • bare : literal:任何有效的Ruby标识符(例如:foo:Foo:@@foo:$foo :@@foo:$foo:$: ,…)
  • single-quoted : literal:在单引号String文字中有效的所有内容,包括转义序列,例如:'\'':'\\'
  • double-quoted : literal:在双引号String文字中有效的所有内容,包括转义序列,如:"\"":"\\":"\n" ,以及字符串插值,它允许你将任意Ruby代码的结果注入Symbol ,例如:"#{if rand < 0.5 then RUBY_VERSION else ENV['HOME'] end}"
  • 单引号的Symbol文字:在单引号ArrayString文字中有效的所有内容,例如%i|foo bar baz| (相当于[:foo, :bar, :baz] ), %i(foo\ bar baz) (相当于[:'foo bar', :baz] ), %i:foo bar:相当于[:foo, :bar]
  • 双引号的Symbol文字:在双引号ArrayString文字中有效的所有内容,例如%I|foo #{bar} baz|
  • 键中的Symbol哈希键key: value语法:每个有效的Ruby标签,例如{foo: 42}
  • 引用的'key': value中的Symbol哈希键'key': value语法:每个有效的Ruby String文字,包括转义序列和插值,例如{"foo\n#{bar}": 42}

当然还有许多其他表达式可以评估为Symbol

  • 方法定义表达式: def foo;end # => :foo
  • String#to_sym (别名String#intern String#to_sym ): 'foo bar'.to_sym # => :'foo bar'
  • 实际上, 任何可能return Symbol

http://www.cse.buffalo.edu/~regan/cse305/RubyBNF.pdf列举了定义Ruby语法的无上下文语法产生。 CFG本质上比RE更强大,所以你可能想要为这个工作考虑一个不同的工具 – 但是你当然可以查看这个文档并尝试构建一个匹配所有情况的正则表达式。