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
文字:在单引号Array
的String
文字中有效的所有内容,例如%i|foo bar baz|
(相当于[:foo, :bar, :baz]
),%i(foo\ bar baz)
(相当于[:'foo bar', :baz]
),%i:foo bar:
相当于[:foo, :bar]
) - 双引号的
Symbol
文字:在双引号Array
的String
文字中有效的所有内容,例如%I|foo #{bar} baz|
等 - 键中的
Symbol
哈希键key: value
语法:每个有效的Ruby标签,例如{foo: 42}
- 引用的
'key': value
中的Symbol
哈希键'key': value
语法:每个有效的RubyString
文字,包括转义序列和插值,例如{"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更强大,所以你可能想要为这个工作考虑一个不同的工具 – 但是你当然可以查看这个文档并尝试构建一个匹配所有情况的正则表达式。