如何将非 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
我想匹配包含 \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