带有十六进制字符代码的regexp.FindSubmatch

时间:2015-05-26 19:51:17

标签: regex go

在某些简单的情况下,我无法使用regexp.FindSubmatch。例如,以下代码正常工作:

assigned := regexp.MustCompile(`\x7f`)
group := assigned.FindSubmatch([]byte{0x7f})
fmt.Println(group)

in playground it prints [[127]]

但如果我将字节更改为0x80 does not work。为什么呢?

1 个答案:

答案 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,或使用其他包来匹配您的数据。