使用正则表达式运行 ruby 脚本时,
s = object.value.gsub(/(\A[\s\xA0]*|[\s\xA0]*\Z)/n, '')
出错了
invalid multibyte escape: /(\A[\s\xA0]*|[\s\xA0]*\Z)/ (SyntaxError)
知道为什么吗? Ruby 版本 2.3.1p112(2016-04-26 修订版 54768)[x86_64-linux]
最佳答案
\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)
关于Ruby 正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785594/