在某些简单的情况下,我无法使用regexp.FindSubmatch。例如,以下代码正常工作:
assigned := regexp.MustCompile(`\x7f`)
group := assigned.FindSubmatch([]byte{0x7f})
fmt.Println(group)
(in playground it prints [[127]])
但如果我将字节更改为0x80 does not work。为什么呢?
答案 0 :(得分:1)
如上所述in the package documentation:
所有字符都是UTF-8编码的代码点。
因此正则表达式\x80
与字节值0x80
不匹配,而是与字符U+0080
的UTF-8表示形式匹配。如果我们将您的测试程序更改为:
func main() {
assigned := regexp.MustCompile(`\x80`)
group := assigned.FindSubmatch([]byte{1, 2, 3, 0xc2, 0x80})
fmt.Println(group)
}
我们现在得到两个字节序列[[194 128]]
的匹配,它表示有问题的字符。
无法将regexp
包切换为二进制模式,因此您需要将输入转换为有效的UTF-8,或使用其他包来匹配您的数据。