Golang正则表达式无法匹配字节10。

huangapple go评论85阅读模式
英文:

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 &lt; 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.

huangapple
  • 本文由 发表于 2014年10月17日 06:43:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/26415117.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定