Interpolando regexes em outro regex
No código a seguir,k2
é minimamente diferente dek1
. Isso é,k2
é exatamente o mesmo, exceto que é definido usando uma interpolação. (Isto é, euesperado é exatamente o mesmo; Obviamente, do resultado dep k2
não é.)
v = /[aeiouAEIOUäöüÄÖÜ]/ # vowels
k1 = /[[ßb-zB-Z]&&[^[aeiouAEIOUäöüÄÖÜ]]]/ # consonants defined without interpolation
k2 = /[[ßb-zB-Z]&&[^#{v}]]/ # consonants defined same way, but with interpolation
Mas como abaixo, usandogsub
comk1
funciona, enquanto usá-lo comk2
falha de uma maneira que eu não entendo.
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äöüÄÖÜ])]]/
Por que isso não funciona? O que é(?-mix:...)
? Existe uma maneira de fazer isso funcionar do jeito que eu estava esperando?