2017-12-13 6 views
1

正規表現でRubyスクリプトを実行し、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 revision 54768) [x86_64-linux]

答えて

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) 
+0

ありがとうございます。 – packetie