4

我刚刚将一个旧项目升级到 Ruby 1.9.3。我在使用 unicode 字符串时遇到了很多麻烦。它归结为:

p = "\\username"; "Any String".match(/#{p}/)

这适用于 1.8,并按预期返回 nil。但是,在 1.9 中它会抛出:

ArgumentError: invalid Unicode escape

我正在尝试匹配'\u'字符串。我认为这两个反斜杠会将其从注册为 unicode 中逃脱。

我在这里想念什么?

编辑:单引号也不起作用:

1.9.3p429 :002 > p = '\\username'; "Any String".match(/#{p}/)
ArgumentError: invalid Unicode escape
from (irb):2
4

1 回答 1

3

当您这样做时/#{p}/,这意味着p将被解释为正则表达式。由于您p现在等于\username,因此此 Regexp 编译将失败(因为它是无效的 Unicode 转义序列):

>> Regexp.new "\\username"
RegexpError: invalid Unicode escape: /\username/

即做/#{p}/等于写/\username/

因此,您必须逃避p任何正则表达式,以便正确解释:

"Any String".match(/#{Regexp.escape(p)}/)

要不就:

"Any String".match(Regexp.escape(p))
于 2013-06-04T09:35:15.637 回答