Ruby正则表达式错误

时间:2017-12-13 04:40:41

标签: ruby regex

使用正则表达式运行ruby脚本时,

function! SetUpPath(filepath)
    setlocal path=
    for l:tagfile in tagfiles()
        let l:tagpath = fnamemodify(l:tagfile, ":h")
        execute "setlocal path+=" . fnameescape(l:tagpath) . '/**'
    endfor
    setlocal path-=.
    setlocal path-=
    setlocal path-=
endfunction

autocmd BufEnter * call SetUpPath(fnamemodify(expand("<afile>"), ":p"))

收到错误

s = object.value.gsub(/(\A[\s\xA0]*|[\s\xA0]*\Z)/n, '')

知道为什么吗? Ruby版本invalid multibyte escape: /(\A[\s\xA0]*|[\s\xA0]*\Z)/ (SyntaxError)

1 个答案:

答案 0 :(得分:3)

\xHH语法仅对UTF-8字符\x00\x7F有效。 \x80\xFF在US-ASCII编码中有效,但不在UTF-8;要在UTF-8中使用更高的字符,请使用\uHHHH。因此,这些都有效:

/\u00A0/

/#{"\\xA0".encode('US-ASCII')}/

Regexp.new("\\xA0".encode('US-ASCII'))

# encoding: US-ASCII
/\xA0/

虽然他们做了不同的事情,取决于你匹配的编码。例如:

# encoding: UTF-8
Regexp.new("\\xA0".encode('US-ASCII')) =~ "\u00A0"
# => Encoding::CompatibilityError: incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)