This question already has answers here:
Why does “Year 2010” =~ /([0-4]*)/ results in empty string in $1?

(7 个回答)


4年前关闭。




我有这样的代码
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}? 打印中

  • 有人能告诉我发生了什么事吗?

    最佳答案

    正如 docs 所说(强调):


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

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

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

    关于go - 正则表达式查找中文unicode字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40992042/

    10-13 08:45