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

Ksh*_*rma 3 regex go

包主

请考虑以下代码:

import (
    "fmt"
    "regexp"
)

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

它输出:

.光盘

我已经在regexpal上测试了我的正则表达式和字符串.它应该只匹配AB.什么匹配cd那之间插入一个.

Wik*_*żew 5

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

EMPTY_STRING A EMPTY_STRING B EMPTY_STRING c EMPTY_STRING d EMPTY_STRING
Run Code Online (Sandbox Code Playgroud)

[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-|
Run Code Online (Sandbox Code Playgroud)

导致.c.d..

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