英文:
Golang regex cant match byte 10
问题
请尝试以下代码:
func main() {
r := regexp.MustCompile(`(.)`)
for i := 0; i < 255; i++ {
d := []byte{byte(i)}
all := r.FindAll(d, -1)
fmt.Println(all)
}
}
通配符无法匹配字节10(即换行符)。看起来像是一个错误。我猜测正则表达式本来就不是为了与[]byte
一起使用而设计的,但是Go语言提供了[]byte
函数,所以这可能是一个疏忽。
英文:
Try the following:
func main(){
r := regexp.MustCompile(`(.)`)
for i := 0; i < 255; i++{
d := []byte{byte(i)}
all := r.FindAll(d, -1)
fmt.Println(all)
}
}
The wildcard cannot match byte 10 (ie the new line character). Looks like a bug. I suppose regex was never really meant to work with []byte, but golang offers the []byte functions, so this is kind of an oversight.
答案1
得分: 6
你需要告诉它匹配换行符..通过指定s
标志:
r := regexp.MustCompile(`(?s)(.)`)
在playground中尝试一下:http://play.golang.org/p/MK-UECa9AV
s
标志告诉解析器让.
匹配换行符。
英文:
You need to tell it to match against new lines .. by specifying the s
flag:
r := regexp.MustCompile(`(?s)(.)`)
Try it in the playground: http://play.golang.org/p/MK-UECa9AV
The s
flag tells the parser to let .
match a new line.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论