Спасибо angra, спасибо perl.Совсем забыл, строка
имя = Вася
также валидна и как раз она не подходит под регекс.
Привожу пример (несколько усложнил пример и на ruby1.9, но думаю понятно будёт)
irb(main):010:0> " \tname = \t'value d\'one' ".sub!(/^[\s]*([^\s#;=]+)[\s=]*([\"'])?(.*?)(?<!\\)\2\s*$/, '[\1] = [\2][\3]')
=> "[name] = ['][value d'one]"
irb(main):011:0> " \tname = \tvalue d\'one ".sub!(/^[\s]*([^\s#;=]+)[\s=]*([\"'])?(.*?)(?<!\\)\2\s*$/, '[\1] = [\2][\3]')
=> nil
Пустой "\2" - не отрабатывает?
Да, и негативное загляд. назад (?<!\\) не работает.
irb(main):013:0> " \tname = \t'value \'one\' ".sub!(/^[\s]*([^\s#;=]+)[\s=]*([\"'])?(.*?)(?<!\\)\2\s*$/, '[\1] = [\2][\3]')
=> "[name] = ['][value 'one]"
Хотя может дело в zsh или regexp ruby.
Как нативно (и проще/быстрее) проверить в perl-e.