$ Vous n'avez pas besoin regexes:
str = %q{
class Rename < ActiveRecord::Migration
def change
rename_table :users, :vendors
rename_table :places, :venues
end
end
}
str.each_line do |line|
puts line.split[-1] if line.lstrip.start_with? 'rename_table'
end
--output:--
:vendors
:venues
Dans tous les cas, le groupe en votre regex est ([]+)
. Les crochets sont des caractères regex spéciaux et ils représentent une classe de caractères , dans laquelle vous spécifiez les caractères que vous souhaitez faire correspondre, par ex. [xyz]
. Cette classe de caractères correspond à un caractère x
ou y
ou z
. Dans votre cas, la classe de caractères est vide, ce qui produit une erreur Ruby 2.2:
char-classe vide: /rename_table.*([]+)$/
Essentiellement, le rubis est disant: Wtf??! You specified a character class with no characters. Are you really trying to say, I want to match one character that is in the character class consisting of no characters?. I don't think so! Error! Error! Error!
Je pense que OP veut 'vendors' et' venues' qui ne sont pas préfixé par ':' ' – andlrc
line.split met [-1] [1 ..- 1]' – 7stud