2013-06-04 3 views
4

Я только что обновил старый проект до Ruby 1.9.3. У меня проблемы с строк unicode. Он сводится к:Ruby 1.9 unicode escapes в Regexp

p = "\\username"; "Any String".match(/#{p}/) 

Это работает в 1,8 и возвращает нуль, как ожидалось. Однако, в версии 1.9 он бросает:

ArgumentError: invalid Unicode escape 

Я пытаюсь соответствовать '\u' в строке. Я думал, что две обратные косые черты уйдут от регистрации в виде юникода.

Что мне здесь не хватает?

Edit: Одинарные кавычки не работают слишком:

1.9.3p429 :002 > p = '\\username'; "Any String".match(/#{p}/) 
ArgumentError: invalid Unicode escape 
from (irb):2 

ответ

3

Когда вы /#{p}/ это означает p будет интерпретироваться как регулярное выражение. Так как ваш p теперь равен \username, то это Regexp компиляция потерпит неудачу (так как это ошибочная последовательность выхода Unicode):

>> Regexp.new "\\username" 
RegexpError: invalid Unicode escape: /\username/ 

Т.е. делает /#{p}/ - записано /\username/.

Поэтому вы должны бежать p от любых регулярных выражений, так что будет правильно интерпретировать:

"Any String".match(/#{Regexp.escape(p)}/) 

Или просто:

"Any String".match(Regexp.escape(p)) 
+0

Это работает. Спасибо – user2450763

+0

работает как волшебство. большое спасибо!! :) – shivam

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