我试图看看字符串是否s包含正则表达式中的任何符号.下面的正则表达式在rubular上运行正常.
s = "asd#d"
s =~ /[~!@#$%^&*()]+/
Run Code Online (Sandbox Code Playgroud)
但是在Ruby 1.9.2中,它给出了以下错误消息:
syntax error, unexpected ']', expecting tCOLON2 or '[' or '.'
s = "asd#d"; s =~ /[~!@#$%^&*()]/
Run Code Online (Sandbox Code Playgroud)
怎么了?
And*_*all 12
这实际上是一个特殊的字符串插值案例,其中包含大多数似乎都不知道的全局变量和实例变量.由于字符串插值也出现在Ruby的正则表达式中,我将在下面用字符串说明(因为它们提供了一个更简单的例子):
@foo = "instancefoo"
$foo = "globalfoo"
"#@foo" # => "instancefoo"
"#$foo" # => "globalfoo"
Run Code Online (Sandbox Code Playgroud)
因此,您需要转义#以防止插值:
/[~!@\#$%^&*()]+/
Run Code Online (Sandbox Code Playgroud)
我知道在Ruby中创建非插值正则表达式的唯一方法是从字符串(注意单引号):
Regexp.new('[~!@#$%^&*()]+')
Run Code Online (Sandbox Code Playgroud)