【发布时间】:2013-05-23 02:28:58
【问题描述】:
在下面的代码中,k2 与 k1 的区别很小。也就是说,k2 完全相同,只是它是使用插值定义的。 (也就是说,我期望完全一样;从p k2的结果显然不是。)
v = /[aeiouAEIOUäöüÄÖÜ]/ # vowels
k1 = /[[ßb-zB-Z]&&[^[aeiouAEIOUäöüÄÖÜ]]]/ # consonants defined without interpolation
k2 = /[[ßb-zB-Z]&&[^#{v}]]/ # consonants defined same way, but with interpolation
但如下所示,将gsub 与k1 一起使用是可行的,而将其与k2 一起使用会以我不理解的方式失败。
all_chars = "äöüÄÖÜß"<<('a'..'z').to_a.join<<('A'..'Z').to_a.join
p all_chars # "äöüÄÖÜßabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
p all_chars.gsub( k1 , '_' ) # "äöüÄÖÜ_a___e___i_____o_____u_____A___E___I_____O_____U_____"
p all_chars.gsub( k2 , '_' ) # "äöüÄÖÜ_abcdefghijklm_o_____u__x__ABCDEFGHIJKLMNOPQRSTUVWXYZ"
p k1 # /[[ßb-zB-Z]&&[^[aeiouAEIOUäöüÄÖÜ]]]/
p k2 # /[[ßb-zB-Z]&&[^(?-mix:[aeiouAEIOUäöüÄÖÜ])]]/
为什么它不起作用? (?-mix:...) 是什么?有没有办法让这项工作按我预期的方式工作?
【问题讨论】:
标签: ruby regex string-interpolation