Ruby: Split: преждевременное завершение регулярного выражения - PullRequest
1 голос
/ 09 января 2011


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

 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

Ответы [ 2 ]

4 голосов
/ 09 января 2011

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

2 голосов
/ 09 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...