go解释这个正则表达式的解释

时间:2016-08-10 11:41:01

标签: regex go

package main

请考虑以下代码:

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[A-Z]*")
    fmt.Println(re.ReplaceAllString("ABcd", "."))
}

输出:

  

.c.d。

我在regexpal上测试了我的正则表达式和字符串。它应该只匹配AB。在cd之间匹配.会匹配什么?

2 个答案:

答案 0 :(得分:5)

正则表达式引擎将ABcd字符串视为

EMPTY_STRING A EMPTY_STRING B EMPTY_STRING c EMPTY_STRING d EMPTY_STRING

[A-Z]*匹配零个或多个 ASCII大写字母。也就是说,它可能与EMTPY_STRING匹配。它的工作原理如下:

EMPTY_STRING A EMPTY_STRING B EMPTY_STRING c EMPTY_STRING d EMPTY_STRING
| ------------- First match ------------ |   |-2nd one-|    |-3rd one-|

导致.c.d.

因此,您应该考虑使用+{1,}量词而不是*(= {0,})。

答案 1 :(得分:4)

你的正则表达式中的passport-facebook-token匹配或更多的大写字母出现,其中有两个在初始运行两个(AB)之后。 对于一个或更多的出现,将其更改为*