Regex interpolieren in einen anderen Regex
Im folgenden Codek2
ist minimal anders alsk1
. Das ist,k2
ist genau das gleiche mit der Ausnahme, dass es mit Hilfe einer Interpolation definiert wird. (Das heißt, icherwartet es ist genau dasselbe; Offensichtlich aus dem Ergebnis vonp k2
es ist nicht.)
v = /[aeiouAEIOUäöüÄÖÜ]/ # vowels
k1 = /[[ßb-zB-Z]&&[^[aeiouAEIOUäöüÄÖÜ]]]/ # consonants defined without interpolation
k2 = /[[ßb-zB-Z]&&[^#{v}]]/ # consonants defined same way, but with interpolation
Aber wie unten, mitgsub
mitk1
funktioniert, während es mitk2
scheitert in einer Weise, die ich nicht verstehe.
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äöüÄÖÜ])]]/
Warum funktioniert es nicht? Was ist(?-mix:...)
? Gibt es eine Möglichkeit, diese Arbeit so zu machen, wie ich es erwartet hatte?