package main
请考虑以下代码:
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[A-Z]*")
fmt.Println(re.ReplaceAllString("ABcd", "."))
}
输出:
.c.d。
我在regexpal上测试了我的正则表达式和字符串。它应该只匹配AB
。在c
和d
之间匹配.
会匹配什么?
答案 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)之后。
对于一个或更多的出现,将其更改为*
。