我有一个字符串列表,需要使用它们从它们构建正则表达式Regexp#union.我需要生成的模式不区分大小写.
该#union方法本身不接受选项/修饰符,因此我目前看到两个选项:
strings = %w|one two three|
Regexp.new(Regexp.union(strings).to_s, true)
Run Code Online (Sandbox Code Playgroud)
和/或:
Regexp.union(*strings.map { |s| /#{s}/i })
Run Code Online (Sandbox Code Playgroud)
两种变体看起来都有些奇怪.
是否有能力使用Regexp.union?构造不区分大小写的正则表达式?
我有一个字符串说__CODE__,我有一个字符串数组说
str ="this is the string "
Run Code Online (Sandbox Code Playgroud)
我想处理字符串,以便匹配任何数组元素的子字符串应该被删除,其余的字符串应该返回.所以我想要以下输出.
array =["this is" ,"second element", "third element"]
Run Code Online (Sandbox Code Playgroud)
我怎么能在红宝石中做到这一点.
在以下代码中,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
Run Code Online (Sandbox Code Playgroud)
但是如下所示,gsub与k1Works一起使用,而与之结合使用却以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äöüÄÖÜ])]]/
Run Code Online (Sandbox Code Playgroud)
为什么不起作用?什么(?-mix:...)啊 有没有办法像我期望的那样进行这项工作?