比如,
foo = '你好' regex = /#{foo}/ 会变成 `/?-mix:你好/` 而且最诡异的是,偶尔还能变成 `/你好/`
变量好像需要 escape。
如何 escape 呢?URI.escape 似乎不是 \uXXXX 的形式
\uXXXX
http://stackoverflow.com/questions/28630936/what-is-mix-in-a-ruby-regular-expression/34026971
主要是用中文字符串变量生成的正则表达式带这个 mix,然后匹配经常莫名其妙失败(重启一下 rails 就好了)。这个问题有什么解决思路吗?
你的 Ruby 版本是多少?是否方便试试升级到 2.4.1 (对正则引擎有了一些改动)
2.4.1
我用你的样本(MRI 2.4.1)没有复现出来的。
[1] pry(main)> foo = '你好' => "你好" [2] pry(main)> regex = /#{foo}/ => /你好/ [3] pry(main)> Regexp.new foo => /你好/
@jasl With your code
2.4.1 :008 > puts reg (?-mix:你好) => nil
Regexp#to_s
Returns a string containing the regular expression and its options (using the (?opts:source) notation.
?-mix: are the options
?-mix:
When Regexp#to_s is called, especially when implicit, ?-mix turns out.
?-mix
sorry 我也没仔细去看 SO 的答案,这个我之前也没注意过的