如何将非 Unicode 字符串与 Ruby 中的正则表达式匹配?

How to match non-Unicode string with regexp in Ruby?

我想匹配包含 \xa0 的字符串,例如:

"\xa0" =~ /\xa0/

但是错误会抛出:

SyntaxError: (eval):2: invalid multibyte escape: /\xa0/

我正在尝试使用Unicode来匹配:

"\xa0" =~ /\u00a0/

也会抛出错误:

ArgumentError: invalid byte sequence in UTF-8

那么,如何在ruby

中匹配\xa0

并非每个字节序列都是有效的 Unicode 字符串。 (或更具体地说是 UTF-8)

例如你的单字节字符串不是:

str = "\xa0"

str.encoding        #=> #<Encoding:UTF-8>
str.valid_encoding? #=> false
str.codepoints      #   ArgumentError (invalid byte sequence in UTF-8)

要使用任意字符串,您已将其编码设置为 binary / ASCII:

str = "\xa0".b      # <-- note the .b

str.encoding        #=> #<Encoding:ASCII-8BIT>
str.valid_encoding? #=> true
str.codepoints      #=> [160]

并将 regexp encoding 设置为 ASCII:(通过 n 修饰符)

str =~ /\xa0/n
#=> 0