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

ruby符号(语法)可以包含什么?,ruby,symbols,Ruby,Symbols,我想创建正则表达式来匹配ruby符号,但我需要知道符号的确切语法是什么 到目前为止,我知道以下几点: :'string' :"string" :__underline :method :exclamation! :question? :@instance :$global 枚举定义Ruby语法的上下文无关语法产品。CFGS本质上比RES更强大,所以您可能需要考虑一个不同的工具来完成这项工作,但是您可以查看该文档并尝试构建与所有情况匹配的REGEXP。 < P>,您所谈论的内容还不完全清楚。 如

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

到目前为止,我知道以下几点:

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

枚举定义Ruby语法的上下文无关语法产品。CFGS本质上比RES更强大,所以您可能需要考虑一个不同的工具来完成这项工作,但是您可以查看该文档并尝试构建与所有情况匹配的REGEXP。

< P>,您所谈论的内容还不完全清楚。 如果您谈论的是
符号
可以包含的内容,那么答案是:任何东西,包括换行符、任意空格、控制字符、任意怪异和模糊的Unicode字符,以及其他所有东西

如果您正在谈论书写
Symbol
文字的各种方式,以下是我的最佳理解:

  • 文本:任何有效的Ruby标识符(例如
    :foo
    :foo
    :@foo
    :@@foo
    :$foo
    :$:
    ,…)
  • 单引号
    literal:单引号
    字符串中有效的所有内容,包括转义序列,如
    :'\''
    :'\'
  • 双引号
    文本:双引号
    字符串中有效的所有内容,包括转义序列,如
    :“\”
    :“\”
    ,和
    :“\n“
    ,以及字符串插值,它允许您将任意Ruby代码的结果注入到
    符号中,例如
    :”#{如果rand<0.5,则Ruby版本else ENV['HOME']end}”
  • 单引号
    数组
    符号
    的文字:在
    字符串
    的单引号
    数组
    中有效的所有内容,例如
    %i | foo bar baz |
    (相当于
    [:foo,:bar,:baz]
    ),
    %i(foo\bar baz)
    (相当于
    [:'foo bar',:baz]
    ),
    %i:foo-bar:
    (相当于
    [:foo,:bar]
  • 双引号
    数组
    of
    符号
    s文字:在双引号
    数组
    of
    字符串
    文字中有效的所有内容,例如
    %I | foo{bar}baz
  • Symbol
    key:value中的散列键
    语法:每个有效的Ruby标签,例如
    {foo:42}
  • Symbol
    引用的
    'key'中的散列键:value
    语法:每个有效的Ruby
    字符串
    文本,包括转义序列和插值,例如
    {foo\n#{bar}:42}
当然,还有许多其他表达式计算为
Symbol
s:

  • 方法定义表达式:
    def foo;结束#=>:foo
  • String#to#sym
    (别名
    String#intern
    ):
    “foo bar”。to#sym=>:“foo bar”
  • 实际上,任何可能
    返回
    符号的方法

为什么要将符号与regexp匹配?请原谅我的无知,但是如果您可以使用
:“any string”
,那么字符串中有效的任何内容都肯定在符号中有效。我这样做是为了模板引擎。:D,:-)和:-/也是符号。@Vitalielenhaupt有趣的事实:因为Ruby将几乎所有的unicode字符都视为符号的有效部分,
:正是我想要的!非常感谢你。我正在为一个模板系统创建我自己的解析器,所以我现在可以正确地集成嵌入式ruby。非常透彻的解释。非常感谢你!我认为你的回答是正确的,因为我知道你在这方面做了很多工作,而且你最好地回答了我的问题。