相关疑难解决方法(0)

如何使用Regexp.union构建不区分大小写的正则表达式

我有一个字符串列表,需要使用它们从它们构建正则表达式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?构造不区分大小写的正则表达式?

ruby regex

5
推荐指数
1
解决办法
752
查看次数

Ruby删除与数组的任何元素匹配的子字符串

我有一个字符串说__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)

我怎么能在红宝石中做到这一点.

ruby arrays string ruby-on-rails

3
推荐指数
2
解决办法
1796
查看次数

将正则表达式插入另一个正则表达式

在以下代码中,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)

但是如下所示,gsubk1Works一起使用,而与之结合使用却以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:...)啊 有没有办法像我期望的那样进行这项工作?

ruby regex string-interpolation

2
推荐指数
1
解决办法
700
查看次数