Интерполяция регулярных выражений в другое регулярное выражение
В следующем коде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:...)
? Есть ли способ заставить эту работу работать так, как я ожидал?