这是否表明某些未预料到的东西正在作为字符串输入到数组中?
是的,就是这样。我希望您有嵌套数组,并且在那里的某个地方有一个空数组的数组[[]]
,其 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: /[[]]/
如果要将字符串用作文字字符,则要使用Regexp.escape
:
nilfacs.each do |fac|
p /#{Regexp.escape fac}/
end
#=> /a\[\]/
#=> /b\[/
#=> /c\]/
或者,您可能希望使用Regexp.union
从数组中创建一个匹配其中所有文字字符串的单个正则表达式:
rejects = %w[dog cat]
re = Regexp.new(Regexp.union(rejects).source,'i') #=> /dog|cat/i
looping_finaltext = finaltext.reject{ |sentence| sentence=~re }