正则表达式*和?的一个错误认识
这两天再看go的正则表达式的时候,看到关于unicode匹配的方式 package main
import (
"fmt"
"regexp"
)
func main() {
re,err := regexp.Compile(`p{Han}*`)
if err != nil {
fmt.Println(err)
return
}
s := "foo中文哦test"
fmt.Println(re.FindString(s))
}
出乎意料的是上面的程序输出的是空,而我希望的是输出 package main
import (
"fmt"
"regexp"
)
func main() {
s := "foo中文哦woqu"
re,err := regexp.Compile(`p{Han}*`)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("find:",re.FindString(s))
re,err = regexp.Compile(`p{Han}+`)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("find:",err = regexp.Compile(`p{Han}?`)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("find:",re.FindString(s))
}
这段程序有如下输出:
原因正是因为 package main
import (
"fmt"
"regexp"
)
func main() {
s := "foo中文哦woqu"
re,err := regexp.Compile(`p{Han}*`)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("find: %qn",re.FindAllString(s, -1))
re,err = regexp.Compile(`p{Han}+`)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("find: %qn",err = regexp.Compile(`p{Han}?`)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("find: %qn", -1))
}
这段程序输出了: find: [“” “” “” “中文哦” “” “” “” “”] find: [“中文哦”] find: [“” “” “” “中” “文” “哦” “” “” “” “”] 正好验证了我的猜测。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |