regexp找到中文unicode字符

时间:2016-12-06 09:35:46

标签: go unicode

我有这样的代码

re, err = regexp.Compile(`\p{Han}*`)
if err != nil {
    fmt.Println(err)
    return
}
s := "foo中文哦woqu"
fmt.Println(re.FindString(s))

但它打印为空。

然后我将\p{Han}*更改为\p{Han}+,它会显示中文哦。

\p{Han}*更改为\p{Han}?,它会打印为空。

我发现这样的文件:

  • x *零或更多x,更喜欢
  • x +一个或多个x,更喜欢
  • X?零或一个x,更喜欢一个

所以我希望我的印刷品是:

  • \p{Han}* print中文哦
  • \p{Han}+ print中文哦
  • \p{Han}? print中

有人可以告诉我发生了什么吗?

1 个答案:

答案 0 :(得分:3)

正如docs所说(强调补充):

  

FindString返回一个字符串,其中包含正则表达式的s中最左侧匹配的文本。如果没有匹配,则返回值为空字符串,但如果正则表达式成功匹配空字符串,则返回值也为空。如果需要区分这些情况,请使用FindStringIndex或FindStringSubmatch。

\p{Han}*匹配空字符串。您还可以使用FindAllString

查看
fmt.Printf("%q", re.FindAllString(s, -1))
// Prints ["" "" "" "中文哦" "" "" "" ""]

您可以使用与空字符串不匹配的\p{Han}+