2011-01-09 2 views
1


У меня возникают проблемы с использованием функции split в Ruby.
/Users/simonprochazka/Downloads/pes_test_p00/lib/main.rb:28: преждевременный конец регулярного выражения:/(/Ruby: Split: преждевременный конец регулярного выражения

File.open(ARGV[0], "r") do |f| 
    f.each_line do |line| 
    data = line.split(/\t/) 
    puts data[4] 
    if data[4] =~ ["("] 
    special = data[4].split(/(/) 
    scores = special[0].split(/:/) 
    puts data[4] 
    else 
    scores = data[4].split(/:/) 
    end 
    if special[1] != nil 
    matches << Match.new(data[0], scores[0], scores[1], special[1].chop) 
    else 
    matches << Match.new(data[0], scores[0], scores[1]) 
    end 
end 
end 
+0

'IRB (основные): 006: 3> специальные = данные [4] .split (/ (/)' Является ли это проблемой линия, которую я не знаю, что линия линия 28 в источнике – philosodad

+0

?. Да, это он. – Fallion

ответ

4

Если вы хотите использовать ( символ в регулярном выражении, избежать его: /\(/. в противном случае, он будет открыть группу. И незакрытая группа приводит к сбою.

2

Как сказал Никита, ( является частью регулярных выражений синтаксиса, поэтому этот символ должен быть экранирован от \.
Лучше использовать строку вместо регулярных выражений, как параметр, если вы хотите разделить только на один символ. Используйте split('\\'), split(':') и т. Д.
Примечание. Эта строка также имеет специальные символы, а \' работает как экранирование ', поэтому вам нужно удвоить ее.

Смежные вопросы