我似乎无法解决这个问题,希望有人可以提供帮助:
Nilfacs是从哈希中提取的字符串数组.
对于这一行:
looping_finaltext = finaltext.reject {|sentence| nilfacs.any? {|fac| sentence =~ /#{(fac)}/i}}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:warning: character class has ']' without escape: /[[]]/
和
block (2 levels) in <main>': premature end of char-class: /[[]]/i (RegexpError)
所有字符串都只是普通单词(如"条件"),不包含需要转义的字符.
这是否表明某些意外的东西被作为字符串输入数组?或者这行中的语法有问题吗?
这是否表明某些意外的东西被作为字符串输入数组?
是的,就是这样.我希望你有嵌套数组,并且在那里你有一个空数组的数组,[[]]
其to_s表示产生你找到的结果.
在正则表达式文字中使用插值时,源中的字符将被视为正则表达式中的字符.就像/b[/
不是有效的正则表达式一样,因此foo="b["; bar=/#{foo}/
无效.
nilfacs = [ "a[]", "b[", "c]", [[]] ]
nilfacs.each do |fac|
begin
p /#{fac}/
rescue RegexpError=>e
puts e
end
end
#=> empty char-class: /a[]/
#=> premature end of char-class: /b[/
#=> /c]/
#=> warning: regular expression has ']' without escape: /[[]]/
#=> premature end of char-class: /[[]]/
Run Code Online (Sandbox Code Playgroud)
如果要将字符串用作文字字符,则需要使用Regexp.escape
:
nilfacs.each do |fac|
p /#{Regexp.escape fac}/
end
#=> /a\[\]/
#=> /b\[/
#=> /c\]/
Run Code Online (Sandbox Code Playgroud)
或者,您可能希望使用Regexp.union
从数组创建一个匹配其中所有文字字符串的正则表达式:
rejects = %w[dog cat]
re = Regexp.new(Regexp.union(rejects).source,'i') #=> /dog|cat/i
looping_finaltext = finaltext.reject{ |sentence| sentence=~re }
Run Code Online (Sandbox Code Playgroud)